Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine vorbereitete MySQL-Anweisung mit LIMIT fehl, wenn String-Parameter verwendet werden?
Problem:
Bei Verwendung vorbereiteter Anweisungen mit der LIMIT-Klausel in MySQL, es schlägt fehl, wenn die Parameter als übergeben werden Zeichenfolgen.
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
$comments = $db->prepare($query); $comments->execute(array($post, $min, $max));
Antwort:
Das Problem tritt auf, weil die PDOStatement::execute()-Methode alle Parameter als Zeichenfolgen behandelt, was zu einem ungültigen Parameter führt SQL-Anweisung. Erschwerend kommt hinzu, dass MySQL String-Parameter nicht in Zahlen umwandelt, was zu einem Parse-Fehler führt.
Lösungen:
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, 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);
Das obige ist der detaillierte Inhalt vonWarum schlägt meine vorbereitete MySQL-Anweisung mit LIMIT fehl, wenn String-Parameter verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!