Mysql
 sql >> Baza danych >  >> RDS >> Mysql

przy użyciu PROCEDUR PRZECHOWYWANYCH:różne wyniki w mysqli->query(CALL select_procedure) VS mysqli->query(SELECT ...)

rozważ Przygotowane oświadczenia używany z concat() tak jak często.

DROP PROCEDURE if exists myStoredProc101;
DELIMITER $$
CREATE PROCEDURE myStoredProc101
(   pSanitized VARCHAR(124)
)
BEGIN
    set @mySql:=concat("SELECT DISTINCT ID FROM user where match(name) against ('* *",pSanitized,"* *')");
    PREPARE stmt1 FROM @mySql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END 
$$
DELIMITER ;

Twój przechowywany proc nie miał szans zadziałać, ponieważ nawet nie używał twojego parametru. To, co zrobiłeś, to zakopanie czegoś wewnątrz literału napisowego. Również varchar(124) jest trochę dziwny :p

Prawie jedyny sukces, jaki ludzie odnoszą z przygotowanymi oświadczeniami, to użycie zmiennej użytkownika (z @ ) a nieudane próby użycia zmiennych lokalnych (od DECLARE). Dzięki temu w przyszłości możesz zaoszczędzić kilka godzin machania głową.

Ze strony podręcznika PHP Zapisane procedury :

Co do wywoływania zapisanego proc z mysqli , zapoznaj się z Odpowiedź od Pabla Tobara. Nie wygląda to szczególnie przyjemnie z wieloma zmiennymi, ale wydaje się, że tak właśnie jest. Alert spoilera:używaj zmiennych mysql, a nie zmiennych PHP.

To prawda, Pablo nie zwracał zestawu wyników, ale pisał do OUT var w zapisanym proc. Być może musisz zrobić to, co zrobił dla IN parametrów i wywołaj multi_query() , a następnie store_result() , a następnie fetch_all() (w skrócie, PHP odwołuje się do strony w górę).

Alternatywnie, połączenie może zostać wykonane przez Palladium tutaj .

W obu przypadkach należy wziąć pod uwagę przypadek, aby uniknąć znanej luki w przekazywaniu wstrzyknięcia SQL przejdź do procedur zapisanych w bazie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sterownik Connector/J MySQL w konsoli Jenkins Script / Scriptler

  2. Jak zaktualizować wiele kolumn w mysql za pomocą nodejs

  3. Jak zaktualizować samodzielnie hostowane wordpress i zainstalowane wtyczki witryny na żywo do najnowszych dostępnych wersji bez żadnych problemów?

  4. gdzie warunek od oddzielonego przecinkiem varchar w mysql i codeigniter

  5. SQL Self-join z porównaniem danych z różnych dni