Melalui Tatasusunan Parameter PDO dengan Klausa LIMIT
Pengenalan:
Apabila bekerja dengan PDO , ia boleh mencabar untuk lulus tatasusunan parameter dan menggunakan klausa LIMIT secara serentak. Artikel ini menyediakan penyelesaian kepada isu ini.
Pernyataan Masalah:
Memandangkan pertanyaan SQL berikut:
SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2
Anda mahu melaksanakan ini pertanyaan menggunakan tatasusunan parameter, seperti yang dilihat di bawah:
$stmt->execute($array);
Walau bagaimanapun, menggunakan kaedah bindParam() untuk parameter LIMIT (:limit1 dan :limit2) mengakibatkan ralat.
Penyelesaian:
Penyelesaian terletak pada melumpuhkan tetapan PDO lalai PDO::ATTR_EMULATE_PREPARES. Tetapan ini pada asasnya mengarahkan PDO untuk meniru pernyataan yang disediakan, dan bukannya menggunakannya secara asli.
Untuk melumpuhkan tetapan ini:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Setelah tetapan ini dilumpuhkan, pertanyaan boleh disediakan dan dilaksanakan dengan tatasusunan parameter, termasuk nilai LIMIT:
$stmt = $pdo->prepare($sql); $stmt->execute(array(5)); //works!
Implikasi:
Melumpuhkan PDO::ATTR_EMULATE_PREPARES boleh meningkatkan prestasi, kerana ia menghilangkan overhed meniru yang disediakan kenyataan. Walau bagaimanapun, perlu diambil perhatian bahawa tetapan ini didayakan secara lalai atas sebab prestasi.
Sumber Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Apabila Melepasi Parameter Tatasusunan dengan Klausa LIMIT dalam PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!