Rumah >pangkalan data >tutorial mysql >MySQL PreparedStatement: Mengapa `executeQuery()` Gagal dengan Ralat Sintaks?

MySQL PreparedStatement: Mengapa `executeQuery()` Gagal dengan Ralat Sintaks?

Susan Sarandon
Susan Sarandonasal
2025-01-11 15:26:41228semak imbas

MySQL PreparedStatement: Why is `executeQuery()` Failing with a Syntax Error?

Pernyataan Disediakan MySQL: Menyelesaikan executeQuery() Ralat Sintaks

Isu biasa apabila menggunakan PreparedStatement Java dengan MySQL melibatkan ralat SQLException yang menunjukkan masalah sintaks SQL berhampiran pemegang tempat (?). Ini selalunya timbul daripada melaksanakan kenyataan yang salah.

Masalahnya:

Kod Java yang menggunakan PreparedStatement mungkin membuang pengecualian yang serupa dengan:

<code>... you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?'</code>

Pendekatan yang Salah:

Ralat biasanya berlaku apabila cuba melaksanakan PreparedStatement menggunakan executeQuery() dengan hujah rentetan (cth., pertanyaan SQL itu sendiri):

<code class="language-java">statement.executeQuery(searchPerson); // Incorrect</code>

Ini menganggap searchPerson sebagai rentetan SQL literal, mengabaikan ruang letak yang ditetapkan dalam PreparedStatement.

Penyelesaian yang Betul:

Kuncinya adalah untuk melaksanakan PreparedStatement tanpa sebarang parameter yang dihantar kepada executeQuery():

<code class="language-java">statement.executeQuery(); // Correct</code>

Parameter sudah terikat pada PreparedStatement menggunakan setString(), setInt(), dsb., sebelum panggilan executeQuery(). Menyediakan rentetan pertanyaan sekali lagi sebagai hujah mengatasi pengikatan ini dan membawa kepada ralat sintaks. executeQuery() hanya melaksanakan pernyataan dengan parameter pra-terikat.

Atas ialah kandungan terperinci MySQL PreparedStatement: Mengapa `executeQuery()` Gagal dengan Ralat Sintaks?. 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