我正在尝试创建一个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 :(得分:6)
我明白了。
我不需要使用任何分隔符,PDO可以自己处理它们。
但我确实需要将方法从查询(由安装程序使用)切换到exec。
所以,我最终得到了:
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->exec($sql);