Menyelesaikan masalah PDO bindValue
dengan SQL LIMIT
Klausa
Kaedah PDO bindValue
, walaupun tidak ternilai untuk pengikatan parameter dalam pertanyaan SQL, boleh menyebabkan ralat sintaks apabila digunakan dengan klausa LIMIT
. Ini selalunya disebabkan oleh pengendalian jenis pembolehubah yang salah, yang berpotensi diburukkan lagi oleh pepijat yang telah lama wujud (https://www.php.cn/link/3c63021df32e126a8dcf115d07e23f59). Isu ini biasanya menjelma sebagai petikan tunggal yang tidak dijangka mengelilingi pembolehubah terikat dalam klausa LIMIT
, yang membawa kepada ralat sintaks SQL.
Penyelesaian: Penghantaran Integer untuk Pertanyaan Selamat dan Betul
Untuk mengelakkan masalah ini dan, yang paling penting, mencegah kerentanan suntikan SQL, adalah disyorkan untuk menghantar pembolehubah secara eksplisit kepada integer sebelum mengikatnya. Ini memastikan pangkalan data mentafsir nilai sebagai nombor, bukan rentetan, dengan itu menghalang penambahan petikan tunggal yang salah.
Berikut ialah contoh yang menunjukkan pendekatan yang betul:
<code class="language-php">$fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT);</code>
trim($_GET['skip'])
mengalih keluar sebarang ruang putih di hadapan atau di belakang daripada input dan (int)
menghantar rentetan yang terhasil kepada integer. Menggunakan PDO::PARAM_INT
menjelaskan lagi jenis data kepada PDO. Pendekatan gabungan ini menjamin pelaksanaan pertanyaan yang betul dan keselamatan yang dipertingkatkan.
Atas ialah kandungan terperinci Mengapakah `bindValue` Menyebabkan Ralat Sintaks dalam Klausa LIMIT SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!