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

Как да създадете съхранена процедура, съдържаща DELIMITER в PHP със PDO?

От коментари:

Не става така.

За да разберете защо, трябва да разберете как mysql CLI -- и всяка друга програма, която може да чете и изпълнява dump файл като този -- всъщност го обработва.

DELIMITER не е нещо, което сървърът разбира.

DELIMITER се използва за указване на синтактичния анализатор от страна на клиента какъв трябва да бъде текущият разделител на изрази, така че анализаторът от страна на клиента да може правилно да раздели изразите и да ги достави един по един на сървъра за изпълнение.

От документите. Обърнете внимание внимателно, че mysql , всеки път, когато се използва тук, се отнася до mysql помощна програма за клиента -- не сървъра.

Така че, за да обработите такъв файл, имате нужда от анализатор от страна на клиента, който прави същото нещо mysql прави... и тук кодът, който пишете, е (трябва да бъде) анализатор на изявления от страна на клиента. Така че вие ​​сте този, който трябва да напише логиката за работа с разделителя.

За да направите това, което искате, трябва да интерпретирате DELIMITER изрази, използвайте ги, за да следите текущия разделител на изрази, но не ги изпращайте на сървъра.

След това трябва да прочетете входа ред по ред, като буферирате това, което сте прочели, докато намерите указания разделител в края на реда и изпратите резултантния оператор на сървъра -- excluding действителният разделител на оператора от това, което изпращате... така че, например, не бихте изпратили края $$ след тялото на процедурата (освен ако разделителят на текущия израз е ; , който можете или да изпратите, или да не изпратите - сървърът не се интересува.) След това изпразнете буфера и започнете да четете отново, докато видите друг екземпляр на разделител (и изпратите оператора на сървъра) или съответства на DELIMITER и задайте текущата разделителна променлива на вашия код, за да съответства на нея, така че да идентифицирате правилно края на следващия израз.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да използваме mysqli правилно, за да извлечем всички записи от таблицата?

  2. Достъп до частна променлива в PHP (PDO)

  3. Значение на id =LAST_INSERT_ID(id)

  4. Използване на MySQL IN клауза като all inclusive (И вместо ИЛИ)

  5. Създайте функция с незадължителни аргументи в MySQL