用PDO :: prepare创建一个在其create语句中有问号的函数?

时间:2015-12-08 15:25:37

标签: php mysql pdo prepared-statement

我尝试使用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语句在注释中都没有问号,有没有办法解决这个问题?

更新

  • 使用DELIMITER似乎根本不适用于PDO,因此我更新了原始问题。在某种程度上不需要使用DELIMITER吗?
  • 使用PDO :: exec()似乎可以在注释中使用问号,因为没有参数被绑定,那么

3 个答案:

答案 0 :(得分:1)

假设您的要求无法控制您的执行内容,也许您可​​以使用str_replace,甚至preg_replace删除评论中的问号。

答案 1 :(得分:0)

只有在向查询发送参数/变量时才需要

$db->prepare()

如果您没有发送任何参数,则无需准备查询。只需使用

$db->query($sql);

答案 2 :(得分:0)

就像您在评论中提到的那样,请使用exec,因为它没有要绑定的参数。

$pdo->exec($sql);

不是,您不需要DELIMITER和PDO或结尾的;