Apabila melaksanakan pertanyaan MySQL yang memerlukan nama jadual berubah, pengguna mungkin menghadapi ralat seperti yang dilaporkan dalam soalan. Artikel ini bertujuan untuk meneroka penggunaan pernyataan yang disediakan dan menyediakan penyelesaian kepada isu khusus ini.
Ralat yang disebut, "[Err] 1064 - Anda mempunyai ralat dalam Sintaks SQL," menunjukkan bahawa pelayan MySQL tidak dapat mentafsir sintaks pertanyaan dengan betul. Penggunaan pembolehubah "@table" secara langsung dalam pernyataan pertanyaan boleh menjadi puncanya.
Pernyataan yang disediakan menawarkan pendekatan yang boleh dipercayai untuk mengendalikan pertanyaan dinamik yang melibatkan nama jadual berubah. Mereka membenarkan anda untuk menentukan templat pertanyaan dan menggantikan nilai secara dinamik kemudian. Dalam kes ini, kita boleh mentakrifkan templat pertanyaan menggunakan fungsi CONCAT untuk membina nama jadual pembolehubah.
Pertimbangkan langkah berikut:
SET @id := '47'; SET @table := CONCAT(@id, '_2013_2014_voucher'); SET @qry1 := CONCAT('SELECT * FROM ', @table);
Ini menyediakan templat pertanyaan dinamik dalam pembolehubah @qry1.
Seterusnya, sediakan penyata menggunakan arahan PREPARE:
PREPARE stmt FROM @qry1;
Sekarang, anda boleh melaksanakan pernyataan yang disediakan beberapa kali, menggantikan nama jadual yang berbeza mengikut keperluan:
EXECUTE stmt;
Pendekatan yang sama boleh digunakan untuk memadamkan pertanyaan. Hanya bina templat pertanyaan dinamik menggunakan CONCAT dan sediakannya seperti yang ditunjukkan di atas:
SET @qry2 := CONCAT('DELETE FROM ', @table, ' WHERE id = @id');
Menggunakan pernyataan yang disediakan dengan nama jadual dinamik dalam MySQL membolehkan anda melaksanakan pertanyaan dengan nama jadual berubah dengan cekap dan elegan. Ingat untuk menggunakan fungsi CONCAT untuk penggabungan rentetan dan menerima kuasa pernyataan yang disediakan untuk fleksibiliti dan prestasi pertanyaan yang dipertingkatkan.
Atas ialah kandungan terperinci Bagaimana untuk Membina Pertanyaan Dinamik dengan Nama Jadual Pembolehubah dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!