Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Menggunakan LIMIT dengan Penyata yang Disediakan dengan betul dalam MySQL?
Menggunakan Kata Kunci LIMIT dengan Penyata Disediakan dalam MySQL
Klausa LIMIT dalam MySQL digunakan untuk mengehadkan bilangan baris yang dikembalikan oleh pertanyaan SELECT . Walau bagaimanapun, apabila menggunakan LIMIT dengan pernyataan yang disediakan (PDO), pengguna mungkin menghadapi masalah jika mereka memberikan nilai untuk parameter sebagai rentetan.
Pengenalpastian Masalah:
Ralat berlaku kerana kaedah execute() PDO secara automatik merawat semua parameter sebagai rentetan, tanpa mengira jenis data sebenar mereka. Ini boleh membawa kepada ralat penghuraian jika nilai angka dijangka dalam klausa LIMIT.
Sebagai contoh, pertanyaan berikut akan gagal dengan ralat penghuraian:
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
Jika parameter ($min dan $max) diluluskan sebagai rentetan, pernyataan SQL yang terhasil ialah:
LIMIT '0', '10'
Ini sintaks tidak sah dalam MySQL kerana nilai untuk LIMIT hendaklah berbentuk angka.
Penyelesaian:
Terdapat beberapa cara untuk menyelesaikan isu ini:
Ikat parameter pada pernyataan secara eksplisit, menyatakan jenis data masing-masing:
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT);
Daripada menghantar nilai untuk LIMIT sebagai parameter, tambahkannya secara manual pada pertanyaan rentetan:
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
Pemacu MySQL mempunyai ciri yang memetik hujah angka dalam pernyataan yang disediakan. Ini boleh dilumpuhkan dengan menetapkan atribut ATTR_EMULATE_PREPARES kepada FALSE:
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Atas ialah kandungan terperinci Bagaimana Menggunakan LIMIT dengan Penyata yang Disediakan dengan betul dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!