Kode Kesalahan:1054. Kolom 'SPA' tidak diketahui di 'klausa tempat'
Ini terjadi ketika Anda tidak menyertakan string input dalam tanda kutip, dan mesin SQL mencoba mengidentifikasinya sebagai kolom dalam tabel yang dikueri. Tetapi gagal karena tidak dapat menemukannya.
Tapi apa yang terjadi ketika menemukan kolom seperti itu?
Ini mengambil hasil ketika menemukan beberapa kecocokan pada nilai kolom.
Jelas ini bukan yang diharapkan.
Bagaimana mengatasi hal ini? Gunakan Pernyataan yang Disiapkan dengan nilai input dinamis.
Anda dapat menggunakan placeholder seperti ?
dalam prosedur tersimpan juga pada nilai input dinamis untuk digunakan dengan Prepared Statements
. Mesin akan menangani karakter pelarian dan nilai string lainnya saat ditetapkan ke atau dibandingkan dalam ekspresi SQL.
Anda hanya perlu menetapkan kembali input prosedur ke satu atau beberapa variabel sesi, sesuai kebutuhan.
Contoh pada prosedur Anda :
CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
SET @w_team := w_team;
PREPARE stmt3 FROM @t1;
EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
DEALLOCATE PREPARE stmt3;
END;