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
Patricia Arquetteasal
2024-12-11 12:46:15636semak imbas

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

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

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!

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