Kod błędu:1054. Nieznana kolumna „SPA” w klauzuli „where”
Dzieje się tak, gdy nie umieszczasz ciągu wejściowego w cudzysłowie, a silnik SQL próbuje zidentyfikować go jako kolumnę w tabeli, której dotyczy zapytanie. Ale zawodzi, ponieważ nie może go znaleźć.
Ale co się stanie, gdy znajdzie taką kolumnę?
Pobiera wyniki, gdy znajdzie jakieś dopasowania w wartościach kolumny.
Oczywiście nie tego się spodziewano.
Jak to przezwyciężyć? Użyj przygotowanych instrukcji z dynamicznymi wartościami wejściowymi.
Możesz użyć symboli zastępczych, takich jak ?
w procedurach składowanych również na dynamicznych wartościach wejściowych do użycia z Prepared Statements
. Silnik będzie obsługiwał znaki ucieczki i inne wartości ciągów, gdy są przypisywane lub porównywane w wyrażeniach SQL.
Wystarczy ponownie przypisać dane wejściowe procedury do jednej lub więcej zmiennych sesji, zgodnie z wymaganiami.
Przykład Twojej procedury :
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;