2013-08-23 13 views
5

PHP'den bir TEXT dosyası okuyorum ve bir DB oluşturma ve sahip olduğu tüm tablo ve prosedürler gibi komutları yürütmeye çalışıyorum. Kodum tabloları oluşturur, ancak dosyada verilen Saklı Yordamları oluşturmaz.PHP'de PDO ile Depolanmış Prosedürler Oluşturun

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, SP'leri oluşturmuyor, bu görevi nasıl gerçekleştirecek? Tüm kod parçasını birlikte çalıştırmayı denedim ve satır satır, ama hiçbir şey çalışmıyor.
Bir DB yükleyici komut dosyası oluşturmaya çalışıyorum. $$ ilk oluşumu böylece

DROP PROCEDURE IF EXISTS `add_hits`$$ 

Yani bence DDL sonlandırır

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$$ 

soru konuda tutmak ve cevap için bir çaba

cevap

10

PMA Bana bu Soruya cevap vermeme yardımcı oldu.

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; 

Şimdi sorguları çalışır: sorgularınız gibi olabilmesi için her
sen, prosedürün sınırlayıcı bölümünü kaldırmak gerekir Bunun üstesinden gelmek için.
Yardım için @Your Common Sense ve @RiggsFolly teşekkürler. sınırlayıcı gerekli değildir bu yüzden

1

olması gerektiği

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

Şimdi benim Sorgu geçerli: ** DELIMITER $$ BIRAKMA İŞLEMİ IF 'add_hits' EXISTS; CREATE DEFINER = 'root' @ 'localhost' PROCEDURE' add_hits' (id varchar (255)) BEGIN hits_bk bildirimini; , hb_books'tan hits_bk içine isabetler seçin; burada Book_ID = id; update db_books set hits = hits_bk + 1 nerede Book_ID = id; END $$ ** Başlangıcından sonra başka bir yordam var: __DROP PROSEDÜRÜ OLMADIĞINDAN EXISTLER 'add_issues_num'; __ Tüm parçayı exec yöntemiyle birlikte çalıştırıyorum. Ama yine de çalışmıyor. –

4

PHP sadece, normalde bir seferde bir sorguyu yürütmek için izin verir

$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'); 
İlgili konular