Magento:创建存储过程

djd*_*jdy 5 pdo stored-procedures magento

我正在尝试创建一个Magento模块安装程序,它将依次创建一个存储过程.

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

错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

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

djd*_*jdy 6

我想到了.

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

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

所以,我最终得到:

 $write = Mage::getSingleton('core/resource')->getConnection('core_write');
 $write->exec($sql);
Run Code Online (Sandbox Code Playgroud)