Heim >Backend-Entwicklung >PHP-Tutorial >Wie verwende ich LIMIT in MySQL-vorbereiteten Anweisungen mit PDO korrekt?

Wie verwende ich LIMIT in MySQL-vorbereiteten Anweisungen mit PDO korrekt?

DDD
DDDOriginal
2024-11-27 15:57:141012Durchsuche

How to Correctly Use LIMIT in MySQL Prepared Statements with PDO?

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 :

  • Parameter einzeln binden: Geben Sie jeweils den Typ an Parameter mit bindParam():
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $max, PDO::PARAM_INT);
  • Parameter aus der Abfrage ausschließen: Entfernen Sie die Parameter $min und $max aus der Abfrage und geben Sie sie als Teil der an Abfrage:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
  • Emulierte Vorbereitungen deaktivieren: Deaktivieren Sie emulierte Vorbereitungen im MySQL-Treiber:
$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!

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