首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO多个查询不起作用

问PDO多个查询不起作用
EN

Stack Overflow用户
提问于 2013-03-05 00:58:34
回答 2查看 630关注 0票数 0

我正在使用PDO运行查询,但它不是我想要的工作方式。我对pdo so编写了一个包装器,下面是主要的查询方法:

代码语言:javascript
复制
<?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());
}

我不能显示整个查询,但以下是其中的一部分:

代码语言:javascript
复制
    $str = "SET @usapev = :usapev;
    SET @canpev = :canpev;
    SET @ven = :ven;
    SET @usa = :isUSA;
    SET @can = :isCAN;

    DROP TEMPORARY TABLE IF EXISTS T_MailingList;
    CREATE TEMPORARY TABLE T_MailingList
    (
        bsg_uk INT NOT NULL PRIMARY KEY,
        demog_id INT NOT NULL,
        procardnbr VARCHAR(12)
    );

    INSERT IGNORE INTO T_MailingList
    SELECT m.bsg_uk
    , m.demog_id
    , m.procardnbr
    FROM FROM bsg.member m;";

然后,我像这样运行查询:

代码语言:javascript
复制
<?php
    $this->db->query($str, array(
        "ven"    => $ven,
        "usapev" => $usapev,
        "canpev" => $canpev,
        "isUSA"  => (int)$is_usa,
        "isCAN"  => (int)$is_can
    ));

当查询在query()中的回显中回显时,我将其复制到工作台并运行它,它在那里工作得很好。没有错误,我会得到结果。在pdo中,当我运行另一个想要使用临时表的查询时,该表并不存在。

为什么它在PDO中不起作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-05 01:04:03

使用

代码语言:javascript
复制
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

或者使用";“分解查询,并在循环中运行每个查询

代码语言:javascript
复制
$queries = explode(";", $query);
foreach ($queries as $query) {
    $pdo->query($query, $attrs);
}
票数 0
EN

Stack Overflow用户

发布于 2013-03-05 01:03:31

这可能与一次只能准备一个查询有关。下面是afaik预准备语句的工作原理:首先将查询发送到mysql,然后将参数分开发送。由于您向mysql发送了多个查询,这可能就是问题的原因。

PS:我建议您使用存储过程来实现您想要实现的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15206817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档