Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Menggunakan LIMIT dengan Penyata yang Disediakan dengan betul dalam MySQL?

Bagaimana Menggunakan LIMIT dengan Penyata yang Disediakan dengan betul dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-11-28 14:05:14662semak imbas

How to Correctly Use LIMIT with Prepared Statements in 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:

  1. Ikat Parameter Satu demi Satu:

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);
  1. Jangan Lulus Parameter:

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);
  1. Lumpuhkan Persediaan Ditiru:

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn