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
Lepaskan: 2024-11-28 14:05:14
asal
699 orang telah melayarinya

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 ?, ?
Salin selepas log masuk

Jika parameter ($min dan $max) diluluskan sebagai rentetan, pernyataan SQL yang terhasil ialah:

LIMIT '0', '10'
Salin selepas log masuk

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);
Salin selepas log masuk
  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);
Salin selepas log masuk
  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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan