Php PDO多个查询不工作
我正在使用PDO运行查询,但它并没有按我所希望的方式工作。我围绕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->
<?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);
}