Rumah > pembangunan bahagian belakang > tutorial php > Mengapa LIMIT Tidak Berfungsi dengan Penyata Disediakan dalam MySQL?

Mengapa LIMIT Tidak Berfungsi dengan Penyata Disediakan dalam MySQL?

Barbara Streisand
Lepaskan: 2024-11-26 19:27:10
asal
846 orang telah melayarinya

Why Doesn't LIMIT Work with Prepared Statements in MySQL?

LIMIT Kata Kunci dengan Penyata Disediakan dalam MySQL

Soalan ini menangani isu di mana klausa LIMIT tidak berfungsi seperti yang diharapkan apabila menggunakan pernyataan yang disediakan dengan perpustakaan PDO dalam MySQL.

Dalam kod yang disediakan coretan:

<pre class="brush:php;toolbar:false">
$comments = $db->prepare($query); 
/* where $db is the PDO object */ 
$comments->execute(array($post, $min, $max)); 
Salin selepas log masuk

Parameter $min dan $max dianggap sebagai rentetan oleh kaedah PDOStatement::execute. Akibatnya, pernyataan SQL akhir menjadi:

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

yang mengakibatkan ralat sintaks kerana MySQL memerlukan nilai berangka untuk klausa LIMIT.

Penyelesaian Yang Mungkin:

Untuk menyelesaikan isu ini, pertimbangkan perkara berikut pilihan:

  • Ikat Parameter Secara Manual:

    • Ikat setiap parameter dengan jenis yang sesuai menggunakan bindParam.
    • Untuk contoh: $comments->bindParam(2, $min, PDO::PARAM_INT);
  • Gunakan Interpolasi Rentetan:

    • Benamkan nilai $min dan $max terus ke dalam rentetan pertanyaan menggunakan sprintf.
    • Contoh:

      $query = sprintf('SELECT id, content, date
      FROM comment
      WHERE post = ?
      ORDER BY date DESC
      LIMIT %d, %d', $min, $max);
      Salin selepas log masuk
  • Lumpuhkan Emulated Prepare:

    • Tetapkan atribut PDO::ATTR_EMULATE_PREPARES kepada FALSE untuk menghalang MySQL daripada memetik argumen berangka.
    • Contoh: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

Nota :
Kaedah ini akan membolehkan anda menggunakan klausa LIMIT dengan pernyataan yang disediakan dengan betul.

Atas ialah kandungan terperinci Mengapa LIMIT Tidak Berfungsi dengan Penyata Disediakan 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