Php PDO多个查询不工作

Php PDO多个查询不工作,php,mysql,pdo,Php,Mysql,Pdo,我正在使用PDO运行查询,但它并没有按我所希望的方式工作。我围绕pdo编写了一个包装器,下面是主要的查询方法: <?php public function query($query, $params = array()) { if(!is_array($params)) { throw new Exception("Parameter 2 must be a key => value array."); } if(!$this->

我正在使用PDO运行查询,但它并没有按我所希望的方式工作。我围绕pdo编写了一个包装器,下面是主要的查询方法:

<?php
public function query($query, $params = array())
{
    if(!is_array($params))
    {
        throw new Exception("Parameter 2 must be a key => value array.");
    }
    if(!$this->pdo)
    {
        $this->connect();
    }
    echo "
--------------------------------------------------------------------------------

$query

--------------------------------------------------------------------------------    
    ";
    $this->sql = $this->pdo->prepare($query);
    foreach($params as $key => $value)
    {
        $this->sql->bindParam($key, $value);
    }
    $sql = $this->sql->execute();
    if(!$sql)
        throw new Exception('[' . $this->sql->errorCode() . ']: ' . $this->sql->errorInfo());
}
然后按如下方式运行查询:

<?php
    $this->db->query($str, array(
        "ven"    => $ven,
        "usapev" => $usapev,
        "canpev" => $canpev,
        "isUSA"  => (int)$is_usa,
        "isCAN"  => (int)$is_can
    ));

这可能与一次只能准备一个查询有关。下面是afaik准备语句的工作方式:首先将查询发送到mysql,然后单独发送参数。因为您要向mysql发送多个查询,所以这可能是问题的原因

PS:我建议使用一个存储过程来实现您想要实现的目标。

使用

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
或者用“;”分解查询并在循环中运行每个查询

$queries = explode(";", $query);
foreach ($queries as $query) {
    $pdo->query($query, $attrs);
}

可能的副本。接受的答案相当全面。这不是一个查询,而是一组查询。一个接一个地运行它们。我想这可能已经修复了它,我现在有一个新的错误,所以我需要先修复它,然后我会回复你的!我现在用bindParam stmt收到这条消息,因为我的prepare stmt返回false:
PHP致命错误:在/var/www/reportBuilder/classes/Mysql.class.PHP的第102行对非对象调用成员函数bindParam()
$queries = explode(";", $query);
foreach ($queries as $query) {
    $pdo->query($query, $attrs);
}