Falls mal jemand Prepared S. mit LIMIT verwenden möchte:
$stmt = $dbh->prepare("SELECT * FROM tablename WHERE name = :name LIMIT :start, :rows");
$stmt->execute( array('name' => 'cottton', 'start' => 0, 'rows' => 50) );
Wird nicht funktionieren da die Werte als String übergeben(?) werden =)
Also endet die Query als:
SELECT * FROM tablename WHERE name = ´cottton´ LIMIT ´0´,´50´
Lösung: PDO::PARAM_INT
$stmt->bindParam(':param', $var, PDO::PARAM_INT);
Sieht dann so aus:
$stmt = $dbh->prepare("SELECT * FROM tablename WHERE name = :name LIMIT :start, :rows");
$stmt->bindParam(':name', $name, PDO::PARAM_STR); // String
$stmt->bindParam(':start', $start, PDO::PARAM_INT); // int
$stmt->bindParam(':rows', $rows, PDO::PARAM_INT); // int
$name = 'cottton';
$start = 0;
$rows = 50;
$stmt->execute();
Alles anzeigen
Wer man das Ganze dynamisch möchte:
$stmt = $dbh->prepare("SELECT * FROM tablename WHERE name = :name LIMIT :start, :rows");
$bindpara['name'] = 'cottton';
$bindpara['start'] = 0;
$bindpara['rows'] = 50;
foreach($bindpara as $key => &$val){ // &$val um eine Referenz zum Wert zu bekommen
if(is_string($val)){
$stmt->bindParam($key, $val, PDO::PARAM_STR); // String
}elseif(is_int($val)){
$stmt->bindParam($key, $val, PDO::PARAM_INT); // int
}elseif(is_bool($val)){
echo 'error: val is bool';
}
}
$stmt->execute();
Alles anzeigen
PS: es müssen dann wohl alle parameter auf die gleiche Art und Weise (bindParam) übergeben werden.
Hab einen "Mix" mit bindParam und execute( array('name' => 'username') ) getestet und rannte in Fehlermeldungen.