Verwendung des Schlüsselworts LIMIT in MySQL Prepared Statement
Bei der Verwendung vorbereiteter Anweisungen in MySQL mit PDO können Probleme mit dem Schlüsselwort LIMIT auftreten. Die folgende Abfrage:
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
funktioniert nicht mit vorbereiteten PDO-Anweisungen, während sie auf LIMIT 0, 10 geändert wird. Dieses Problem hat seinen Ursprung in der Art und Weise, wie PDO Parameter verarbeitet.
PDO-Parameterbindung
PDOStatement::execute() behandelt alle Eingabeparameter standardmäßig als Zeichenfolgen. Dadurch werden die Parameter $min und $max in der LIMIT-Klausel als Strings eingefügt. MySQL analysiert die Abfrage dann wie folgt:
LIMIT '0', '10'
was zu einem Analysefehler führt.
Lösungen
Es gibt mehrere Möglichkeiten, dieses Problem zu beheben :
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $max, PDO::PARAM_INT);
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Durch die Implementierung einer dieser Lösungen können Sie das Schlüsselwort LIMIT erfolgreich mit vorbereiteten Anweisungen in MySQL verwenden.
Das obige ist der detaillierte Inhalt vonWie verwende ich LIMIT in MySQL-vorbereiteten Anweisungen mit PDO korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!