sql >> Database >  >> RDS >> Mysql

mysql dynamische query in opgeslagen procedure

Foutcode:1054. Onbekende kolom 'SPA' in 'where-clausule'

Dit gebeurt wanneer u de invoertekenreeks niet tussen aanhalingstekens plaatst en de SQL-engine deze probeert te identificeren als een kolom in de tabel die wordt opgevraagd. Maar het mislukt omdat het het niet kan vinden.

Maar wat gebeurt er als het een dergelijke kolom vindt?
Het haalt resultaten op als het enkele overeenkomsten met de kolomwaarden vindt.
Dit is duidelijk niet wat men verwachtte.

Hoe dit te overwinnen? Gebruik voorbereide verklaringen met dynamische invoerwaarden.

U kunt tijdelijke aanduidingen gebruiken zoals ? ook in opgeslagen procedures op dynamische invoerwaarden om te gebruiken met Prepared Statements . De engine verwerkt escape-tekens en andere tekenreekswaarden wanneer ze worden toegewezen aan of vergeleken binnen SQL-expressies.

U hoeft alleen procedure-ingangen opnieuw toe te wijzen aan een of meer sessievariabelen, zoals vereist.

Voorbeeld van uw 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;


  1. Hoe ongewenste voorlooptekens uit een string in MySQL te verwijderen

  2. Hoe retourneer ik gehele en numerieke kolommen uit MySQL als gehele getallen en cijfers in PHP?

  3. Wat is de beste manier om een ​​Django DB van SQLite naar MySQL te migreren?

  4. Een lijst met berekende kolommen retourneren in SQL Server