Rumah  >  Artikel  >  pangkalan data  >  Apa yang Boleh Menyebabkan SQLSTATE[HY000]: Ralat umum: 2031 dalam PDO?

Apa yang Boleh Menyebabkan SQLSTATE[HY000]: Ralat umum: 2031 dalam PDO?

Susan Sarandon
Susan Sarandonasal
2024-10-24 17:02:02609semak imbas

What Can Cause the SQLSTATE[HY000]: General error: 2031 in PDO?

Ralat: Ralat PDO: SQLSTATE[HY000]: Ralat umum: 2031

Ralat ini menunjukkan bahawa terdapat masalah dengan parameter pertanyaan SQL. Dalam kes ini, nampaknya isu ini adalah dengan kaedah bindValue() yang digunakan untuk menambah LIMIT ruang letak pada pertanyaan secara manual.

Kod berikut menyebabkan ralat:

<code class="php">if ($limit) {
   $sth->bindValue(':page', $page - 1, PDO::PARAM_INT);
   $sth->bindValue(':entries_per_page', $page * $entries_per_page, PDO::PARAM_INT);
}</code>

Ralat berlaku kerana pertanyaan mengandungi ruang letak (:page dan :entry_per_page) yang perlu diikat menggunakan bindValue() sebelum pertanyaan boleh dilaksanakan. Walau bagaimanapun, sebelum menggunakan bindValue() untuk mengikat pemegang tempat LIMIT, enjin mengubahnya menjadi rentetan. Untuk menyelesaikan isu ini, anda boleh menggunakan kod berikut:

<code class="php">if ($limit) {
   $query = str_replace(':page', $page - 1, $query);
   $query = str_replace(':entries_per_page', $page * $entries_per_page, $query);
   $sth->execute($criteria);
}</code>

Kod ini akan menggantikan ruang letak dalam pertanyaan dengan nilainya sebelum melaksanakan pertanyaan.

Berhati-hati dengan Pendua Nama Parameter

Adalah penting untuk ambil perhatian bahawa ralat 2031 juga boleh disebabkan oleh mengikat dua nilai pada nama parameter yang sama. Contohnya:

<code class="php">$sth->bindValue(':colour', 'blue');
$sth->bindValue(':colour', 'red');</code>

Menggunakan nama parameter yang sama dua kali akan mengakibatkan ralat. Oleh itu, adalah penting untuk memastikan bahawa setiap nama parameter adalah unik.

Atas ialah kandungan terperinci Apa yang Boleh Menyebabkan SQLSTATE[HY000]: Ralat umum: 2031 dalam PDO?. 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