Mã lỗi:1054. Cột không xác định 'SPA' trong 'mệnh đề where'
Điều này xảy ra khi bạn không đặt chuỗi đầu vào trong dấu ngoặc kép và công cụ SQL cố gắng xác định nó là một cột trong bảng đang được truy vấn. Nhưng nó không thành công vì nó không thể tìm thấy nó.
Nhưng điều gì sẽ xảy ra khi nó tìm thấy cột như vậy?
Nó tìm nạp kết quả khi nó tìm thấy một số kết quả phù hợp trên các giá trị của cột.
Rõ ràng đây không phải là điều người ta mong đợi.
Làm thế nào để vượt qua điều này? Sử dụng Câu lệnh chuẩn bị với các giá trị đầu vào động.
Bạn có thể sử dụng các trình giữ chỗ như ?
trong các thủ tục được lưu trữ cũng trên các giá trị đầu vào động để sử dụng với Prepared Statements
. Công cụ sẽ xử lý các ký tự thoát và các giá trị chuỗi khác khi được gán hoặc so sánh trong các biểu thức SQL.
Bạn chỉ cần gán lại đầu vào thủ tục cho một hoặc nhiều biến phiên, nếu cần.
Ví dụ về quy trình của bạn :
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;