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
Freigeben: 2024-12-06 15:01:11
Original
982 Leute haben es durchsucht

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 ?, ?
Nach dem Login kopieren
$comments = $db->prepare($query);
$comments->execute(array($post, $min, $max));
Nach dem Login kopieren

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);
Nach dem Login kopieren
  • 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);
Nach dem Login kopieren
  • Emulierte Vorbereitungen deaktivieren:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage