2011-06-08 178 views
5

我想创建一个Magento模块安装程序,它将依次创建一个存储过程。Magento:创建存储过程

此过程的代码已经运行:Toad,phpmyadmin和mysql.exe命令行。它在所有3中都有效。但是,当Magento在安装过程中执行它时,它会失败。

错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; 

Magento的代码:

$installer = $this; 
    $installer->startSetup(); 
    $sql = <<<____SQL 
     DELIMITER // 

     CREATE PROCEDURE GetStuff(
      IN pSomeId int(11) 
     ) 
     BEGIN 
     DECLARE pOtherId INT; 

     SELECT some_var INTO pOtherId FROM some_table WHERE id = pSomeId; 
     END;// 
     DELIMITER ; 
     ____SQL; 

    $installer->run($sql); 
    $installer->endSetup(); 

还有介于两者之间的,当然一些其他的代码,但简化并没有改变错误。 我的猜测是,这与Delimeters以及PDO/Magento如何对待它们有关。谢谢。

+0

PHP 5.3,Windows 7的64,阿帕奇2 – djdy 2011-06-08 16:55:23

回答

6

我想通了。

我不需要使用任何分隔符,PDO可以自行处理它们。

但我确实需要将方法从查询(由安装程序使用)切换到exec。

所以,我结束了:

$write = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$write->exec($sql);