Rumah > pangkalan data > tutorial mysql > Mengapa Saya Mendapat 'Ralat sintaks berhampiran '?'' dengan MySQL PreparedStatements?

Mengapa Saya Mendapat 'Ralat sintaks berhampiran '?'' dengan MySQL PreparedStatements?

Patricia Arquette
Lepaskan: 2024-12-11 12:46:15
asal
549 orang telah melayarinya

Why Am I Getting a

Pengecualian Dekat "?" Apabila Melaksanakan PreparedStatement dalam MySQL

Di Java, apabila melaksanakan pertanyaan menggunakan PreparedStatement, seseorang mungkin menghadapi MySQLSyntaxErrorException dengan nombor ralat 1064 yang menunjukkan ralat sintaks berhampiran "?". Ini mungkin berlaku walaupun pertanyaan berfungsi dalam penyemak imbas pertanyaan MySQL dengan nilai yang digantikan.

Setelah diperiksa lebih dekat, ternyata MySQL tidak dapat mentafsir "?" pemegang tempat dalam pertanyaan SQL, menganggapnya sintaks tidak sah. Ini kerana PreparedStatement tidak menggantikan ruang letak ini.

Coretan kod yang anda kongsi tersilap menulis ganti pertanyaan yang disediakan dengan versi asal. Untuk membetulkannya, gunakan PreparedStatement#executeQuery() dan bukannya Statement#executeQuery(String):

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // Correct
Salin selepas log masuk

Nota: Walaupun tidak berkaitan dengan isu semasa, kod anda gagal menutup Sambungan, Penyata dan ResultSet. Peninggalan ini boleh menyebabkan kehabisan sumber dan ranap aplikasi seterusnya. Laksanakan simpulan bahasa JDBC yang betul dengan menutup objek ini dalam blok akhirnya:

try (Connection conn = DriverManager.getConnection(...);
     PreparedStatement s = conn.prepareStatement(...);
     ResultSet rs = s.executeQuery()) {
     // Query execution code
} finally {
     if (rs != null) rs.close();
     if (s != null) s.close();
     if (conn != null) conn.close();
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat sintaks berhampiran '?'' dengan MySQL PreparedStatements?. 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