2013-08-23 10 views
5

Czytam plik TEKST z PHP i próbuję wykonywać z niego polecenia, takie jak tworzenie bazy danych i wszystkich tabel oraz procedur, które ma. Mój kod tworzy tabele, ale nie tworzy zapisanych procedur podanych w pliku.Tworzenie procedur przechowywanych z PDO w PHP

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
select hits into @hits from db_books where Book_ID = id; 
update db_books set [email protected]+1 where Book_ID = id; 
END$$ 

PDO nie tworzy SP, jak będzie w stanie wykonać to zadanie? Próbowałem już wykonać wszystkie części kodu razem i linia po linii, ale nic nie działa.
Próbuję utworzyć skrypt instalatora bazy danych.

Odpowiedz

10

Cóż, PMA pomógł mi w odpowiadanie na to pytanie.
Do tego trzeba usunąć część ogranicznika procedury, tak aby przezwyciężyć zapytań stać jak:

DROP PROCEDURE IF EXISTS `add_hits`; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
declare hits_bk int; 
select hits into hits_bk from db_books where Book_ID = id; 
update db_books set hits=hits_bk+1 where Book_ID = id; 
END; 

Teraz zapytań będzie działać.
Dzięki @ Youour Common Sense i @RiggsFolly za pomoc.

1

W celu utrzymania na temat i odpowiedzieć na pytanie

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
    select hits into @hits from db_books where Book_ID = id; 
    update db_books set [email protected]+1 where Book_ID = id; 
END$$ 

Pierwszy occurance z $$ zakończy DDL tak

DROP PROCEDURE IF EXISTS `add_hits`$$ 

Więc myślę, że powinno być

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `add_hits`; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
    select hits into @hits from db_books where Book_ID = id; 
    update db_books set [email protected]+1 where Book_ID = id; 
END 
$$ 
+0

Teraz moje pytanie brzmi: ** DELIMITER $$ DROP PROCEDURA IF EXISTS 'add_hits'; CREATE DEFINER = 'root' @' localhost' PROCEDURA 'add_hits' (In id varchar (255)) BEGIN zadeklaruj hits_bk int; wybierz trafienia w hits_bk z db_books gdzie Book_ID = id; aktualizacja db_books zestaw trafień = hits_bk + 1 gdzie Book_ID = id; END $$ ** Mam inną procedurę po tym począwszy od: __ PROCEDURA ROZPROSZENIA, JEŚLI EXISTS 'add_issues_num'; __ Łączę całą część razem przez metodę exec. Ale nadal nie działa. –

4

PHP tylko pozwala wykonać jedną kwerendę w czasie zwykle, więc ograniczniki nie są konieczne

$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
$pdo->exec('DROP PROCEDURE IF EXISTS `add_hits`'); 
$pdo->exec('CREATE DEFINER=`root`@`localhost` PROCEDURE `add_hits`(In id varchar(255)) 
BEGIN 
declare hits_bk int; 
select hits into hits_bk from db_books where Book_ID = id; 
update db_books set hits=hits_bk+1 where Book_ID = id; 
END');