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
Barbara Streisandasal
2024-11-26 19:27:10814semak imbas

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)); 

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

LIMIT '0', '10'

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);
  • 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!

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