Ralat Sintaks PreparedStatement: Penyelaman Lebih Dalam
Anda telah menemui mesej ralat yang berkaitan dengan PreparedStatements. Meneliti kod anda, khususnya pertanyaan selectSql1 dan kaedah select1, mendedahkan isu halus.
Masalahnya terletak pada penggunaan kaedah executeQuery PreparedStatement. Kaedah select1 anda sedang cuba untuk memanggil:
return this.stmt.executeQuery(sql);
di mana sql ialah pertanyaan SQL itu sendiri. Ini bukan cara yang betul untuk menggunakan kaedah executeQuery pada PreparedStatement.
Penyelesaian
Pembetulan hanya mengemas kini baris itu kepada:
return this.stmt.executeQuery();
Dengan mengalih keluar parameter sql daripada kaedah executeQuery, anda memastikan bahawa pertanyaan dalaman PreparedStatement dilaksanakan dan bukannya rentetan SQL mentah. PreparedStatements menyediakan parameter pemegang tempat yang dilambangkan dengan tanda soal (?) dalam pertanyaan SQL, yang kemudiannya terikat pada nilai tertentu seperti randNum.
Oleh itu, panggilan executeQuery yang betul dalam konteks ini adalah tanpa sebarang parameter, membenarkan PreparedStatement untuk laksanakan pertanyaan dalamannya, yang telah diikat dengan nilai parameter.
Atas ialah kandungan terperinci PreparedStatement `executeQuery()`: Mengapa Menggunakannya Tanpa Parameter String SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!