Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine vorbereitete MySQL-Anweisung mit LIMIT fehl, wenn String-Parameter verwendet werden?

Warum schlägt meine vorbereitete MySQL-Anweisung mit LIMIT fehl, wenn String-Parameter verwendet werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-06 15:01:11984Durchsuche

Why Does My MySQL Prepared Statement with LIMIT Fail When Using String Parameters?

LIMIT-Schlüsselwort in MySQL mit vorbereiteter Anweisung

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:

  • Bind-Parameter Einzeln:
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $min, PDO::PARAM_INT);
  • Verwendung sprintf() zur Festcodierung numerischer Parameter:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
  • Emulierte Vorbereitungen deaktivieren:
$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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn