Codice di errore:1054. Colonna sconosciuta "SPA" in "clausola where"
Ciò si verifica quando non si racchiude la stringa di input tra virgolette e il motore SQL tenta di identificarla come una colonna nella tabella sottoposta a query. Ma fallisce perché non riesce a trovarlo.
Ma cosa succede quando trova tale colonna?
Recupera i risultati quando trova delle corrispondenze sui valori della colonna.
Ovviamente questo non è quello che ci si aspettava.
Come superare questo? Utilizzare le istruzioni preparate con valori di input dinamici.
Puoi utilizzare segnaposto come ?
anche nelle stored procedure su valori di input dinamici da utilizzare con Prepared Statements
. Il motore gestirà i caratteri di escape e altri valori di stringa quando assegnati o confrontati all'interno di espressioni SQL.
Devi solo riassegnare gli input della procedura a una o più variabili di sessione, come richiesto.
Esempio sulla tua procedura :
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;