Код на грешка:1054. Неизвестна колона „SPA“ в „where clause“
Това се случва, когато не ограждате входния низ в кавички и SQL машината се опитва да го идентифицира като колона в запитаната таблица. Но не успява, тъй като не може да го намери.
Но какво се случва, когато намери такава колона?
Извлича резултати, когато намери съвпадения в стойностите на колоната.
Очевидно това не е това, което човек очакваше.
Как да преодолеем това? Използвайте подготвени изявления с динамични входни стойности.
Можете да използвате заместители като ?
в съхранените процедури също върху динамични входни стойности, които да се използват с Prepared Statements
. Двигателят ще обработва escape символи и други стойности на низове, когато е присвоен или сравнен в SQL изрази.
Просто трябва да пренастроите входовете на процедурата на една или повече променливи на сесията, както е необходимо.
Пример за вашата процедура :
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;