Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql динамична заявка в съхранена процедура

Код на грешка: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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване с DB от разширение за Chrome?

  2. Алтернатива на mysql_real_escape_string без свързване към DB

  3. Комбиниране на операции UNION и LIMIT в MySQL заявка

  4. Как да съхранявате IPv6-съвместим адрес в релационна база данни

  5. Присъединяване на таблици с проблем SUM в MYSQL