Fejlkode:1054. Ukendt kolonne 'SPA' i 'where clause'
Dette sker, når du ikke omslutter inputstrengen i anførselstegn, og SQL-motoren forsøger at identificere den som en kolonne i tabellen, der forespørges. Men den fejler, da den ikke kan finde den.
Men hvad sker der, når den finder en sådan kolonne?
Den henter resultater, når den finder nogle match på kolonneværdierne.
Det er selvfølgelig ikke, hvad man havde forventet.
Hvordan kan man overvinde dette? Brug Prepared Statements med dynamiske inputværdier.
Du kan bruge pladsholdere som ?
i lagrede procedurer også på dynamiske inputværdier til brug med Prepared Statements
. Motoren vil håndtere escape-tegn og andre strengværdier, når den tildeles til eller sammenlignes i SQL-udtryk.
Du skal blot omtildele procedureinput til en eller flere sessionsvariabler, efter behov.
Eksempel på din procedure :
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;