Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggunakan Pembolehubah Bind dengan betul dalam Klausa SQL LIMIT?
Gunakan pembolehubah bind dengan betul dalam klausa SQL LIMIT
Soalan:
Apabila cuba menggunakan bindValue
untuk menetapkan nilai skip
dan max
klausa LIMIT, pernyataan SQL yang dijana adalah tidak sah kerana petikan tunggal ditambahkan pada pembolehubah. Bagaimana untuk menyelesaikan masalah ini?
Jawapan:
Untuk menyelesaikan masalah ini, hantar nilai pembolehubah kepada integer sebelum menghantarnya ke fungsi bindValue
. Ini memastikan petikan tunggal tidak ditambah, sekali gus menyelesaikan ralat sintaks SQL.
Berikut ialah kod yang diubah suai:
<code class="language-php">$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', (int)$_GET['albumid'], PDO::PARAM_INT); // 强制转换为整数 if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', (int)$max, PDO::PARAM_INT); // 强制转换为整数 $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);</code>
Kuncinya ialah menukar pembolehubah $_GET['albumid']
dan $max
secara eksplisit kepada jenis integer sebelum bindValue
. Ini mengelakkan PDO menganggapnya sebagai rentetan dan menambah petikan tunggal, menyebabkan ralat sintaks dalam klausa LIMIT. Fungsi trim()
digunakan untuk mengalih keluar sebarang ruang tambahan dalam pembolehubah $_GET['skip']
.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Pembolehubah Bind dengan betul dalam Klausa SQL LIMIT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!