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

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

Susan Sarandon
Lepaskan: 2025-01-11 15:26:41
asal
225 orang telah melayarinya

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

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

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

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!

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