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:
$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);
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!