Rumah >pangkalan data >tutorial mysql >Mengapa Penyata MySQL Saya Disediakan dengan LIMIT Gagal Apabila Menggunakan Parameter Rentetan?

Mengapa Penyata MySQL Saya Disediakan dengan LIMIT Gagal Apabila Menggunakan Parameter Rentetan?

Susan Sarandon
Susan Sarandonasal
2024-12-06 15:01:11984semak imbas

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

LIMIT Kata Kunci pada MySQL dengan Penyata Disediakan

Masalah:

Apabila menggunakan pernyataan yang disediakan dengan klausa LIMIT dalam MySQL, ia gagal apabila parameter diluluskan sebagai rentetan.

SELECT id, content, date
FROM comment
WHERE post = ?
ORDER BY date DESC
LIMIT ?, ?
$comments = $db->prepare($query);
$comments->execute(array($post, $min, $max));

Jawapan:

Isu timbul kerana kaedah PDOStatement::execute() menganggap semua parameter sebagai rentetan, membawa kepada tidak sah pernyataan SQL. Ini ditambah pula dengan fakta bahawa MySQL tidak akan menghantar parameter rentetan kepada nombor, mengakibatkan ralat penghuraian.

Penyelesaian:

  • Ikat Parameter Secara individu:
$comments->bindParam(1, $post, PDO::PARAM_STR);
$comments->bindParam(2, $min, PDO::PARAM_INT);
$comments->bindParam(3, $min, PDO::PARAM_INT);
  • Gunakan sprintf() ke Parameter Angka Kod Keras:
$query = sprintf('SELECT id, content, date
    FROM comment
    WHERE post = ?
    ORDER BY date DESC
    LIMIT %d, %d', $min, $max);
  • Lumpuhkan Ditiru Menyediakan:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

Atas ialah kandungan terperinci Mengapa Penyata MySQL Saya Disediakan dengan LIMIT Gagal Apabila Menggunakan Parameter Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn