首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO结果显示上一次查询的结果,如何显示当前结果?

PDO结果显示上一次查询的结果,如何显示当前结果?
EN

Stack Overflow用户
提问于 2019-05-01 00:07:11
回答 1查看 25关注 0票数 0

我有两个查询,但是pdo->结果显示的是原始结果,而不是下一个结果。我想要结果query_1 = (a1,a2,a3),然后query_2 = (b1,b2,b3)。但结果显示a1,a2,a3,然后是a1,a2,a3。

DbGlobal.php:

代码语言:javascript
复制
class DbGlobal 
{
  private static $_instance = null;

  private $_pdo,
      $_query,
      $_error = false,
      $_results,
      $_count = 0;

  private function __construct()
  {
    try 
    {
        $this->_pdo = new PDO('mysql:host='. ConfigGlobal::get('mysql/host') .';dbname='. ConfigGlobal::get('mysql/db'), ConfigGlobal::get('mysql/username'), ConfigGlobal::get('mysql/password'));
        //$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } 
    catch (PDOException $e) 
    {
        die($e->getMessage());
    }
  }

  public static function getInstance()
  {
    if(!isset(self::$_instance)) 
    {
        self::$_instance = new DbGlobal();
    }
    return self::$_instance;
  }

  public function query($sql, $params = array())
  {
    $this->_error = false;

    if($this->_query = $this->_pdo->prepare($sql)) 
    {
      $x = 1;
      if(count($params)) 
      {
        foreach($params as $param) 
        {
          $this->_query->bindValue($x, $param);
          $x++;
        }
      }
      if($this->_query->execute()) 
      {
        $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
        $this->_count = $this->_query->rowCount();
      } 
      else 
      {
        $this->_error = true;
      }
    }
    return $this;
  }
}

QueryPage_1.php

代码语言:javascript
复制
$varname = 'Settings_SideBarButtons';
$vararray = array("UniqueId,", "Url,", "Dirr,");
$varstring = implode($vararray);
${$varname} = DbGlobal::getInstance()->query("SELECT ".$varstring." FROM 
".$varname." WHERE a='1'");

在数据库中:

代码语言:javascript
复制
UniqueId => a1
Url => a2
Dirr => a3

结果是正确的:

代码语言:javascript
复制
print_r($Settings_SideBarButtons->results());
//output:
Array 
( [0] => stdClass Object 
    ( [UniqueId] => a1 
      [Url] => a2 
      [Dirr] => a3
    ) 
) 

然后我在同一个查询脚本中使用了另一个具有不同varname的查询。

QueryPage_2.php

代码语言:javascript
复制
$varname = 'Core_Settings';
$vararray = array("UniqueId,", "Url,", "Dirr,");
$varstring = implode($vararray);
${$varname} = DbGlobal::getInstance()->query("SELECT ".$varstring." FROM 
".$varname." WHERE a='1'");

在数据库中:

代码语言:javascript
复制
UniqueId => b1
Url => b2
Dirr => b3

但结果是:

代码语言:javascript
复制
print_r($Core_Settings->results());
//output:
Array 
( [0] => stdClass Object 
    ( [UniqueId] => a1 
      [Url] => a2 
      [Dirr] => a3
    ) 
) 

我已经确认第二个查询中显示的结果是第一个查询的结果。

我是否错误地使用了PDO对象?我必须以某种方式使用PDO->freeresult();吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-01 02:19:34

哇哦。容易出错:我在第二个$vararray中有一个额外的数据库字段,而数据库中没有这个字段。PDO错误没有打印出来,因为它已经在我的查询语句类中注释掉了。

所以记得打开错误报告的家伙。

下面是我对上面代码的PDO错误修复:

代码语言:javascript
复制
private function __construct()
{
    try 
    {
        $this->_pdo = new PDO('mysql:host='. ConfigGlobal::get('mysql/host') .';dbname='. ConfigGlobal::get('mysql/db'), ConfigGlobal::get('mysql/username'), ConfigGlobal::get('mysql/password'));
        $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //added this
    } 
    catch (PDOException $e) 
    {
        die($e->getMessage());
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55924899

复制
相关文章

相似问题

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