我尝试使用PDO连接创建一个函数:
$sql = "
DROP PROCEDURE IF EXISTS `test_procedure`;
CREATE DEFINER = `root`@`%` PROCEDURE `test_procedure`()
SQL SECURITY INVOKER
BEGIN
/* this goes wrong ? */
SET @a = 1;
END;
";
$db = new PDO("mysql:host=localhost;dbname=test123", "root", "password");
$statement = $db->prepare($sql);
$statement->execute();
问题是此功能在注释中有一个问号。
由于prepare
,PDO现在尝试将参数绑定到此问号,这当然会失败。
由于我不能确定我的所有函数create语句在注释中都没有问号,有没有办法解决这个问题?
更新
答案 0 :(得分:1)
假设您的要求无法控制您的执行内容,也许您可以使用str_replace
,甚至preg_replace
删除评论中的问号。
答案 1 :(得分:0)
$db->prepare()
。
如果您没有发送任何参数,则无需准备查询。只需使用
$db->query($sql);
答案 2 :(得分:0)
就像您在评论中提到的那样,请使用exec
,因为它没有要绑定的参数。
$pdo->exec($sql);
不是,您不需要DELIMITER
和PDO或结尾的;