Результаты PDO, показывающие результаты предыдущего запроса, как отобразить текущие результаты? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть два запроса, однако pdo-> results показывает исходные результаты, а не следующие.Я хочу результаты query_1 = (a1, a2, a3) и затем query_2 = (b1, b2, b3).Но результаты показывают a1, a2, a3 и затем снова a1, a2, a3.

DbGlobal.php:

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

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

В базе данных:

UniqueId => a1
Url => a2
Dirr => a3

Результаты верны:

print_r($Settings_SideBarButtons->results());
//output:
Array 
( [0] => stdClass Object 
    ( [UniqueId] => a1 
      [Url] => a2 
      [Dirr] => a3
    ) 
) 

И затем я в том же сценарии запроса с другим запросом, который имеет другое имя переменной.

QueryPage_2.php

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

В базе данных:

UniqueId => b1
Url => b2
Dirr => b3

Но результаты таковы:

print_r($Core_Settings->results());
//output:
Array 
( [0] => stdClass Object 
    ( [UniqueId] => a1 
      [Url] => a2 
      [Dirr] => a3
    ) 
) 

Я подтвердил, что результаты, отображаемые во втором запросе, являются результатами первого запроса.
Я неправильно использую объект PDO?Должен ли я PDO-> freeresult ();как-то?

1 Ответ

0 голосов
/ 30 апреля 2019

Woops. Простая ошибка: у меня было дополнительное поле базы данных во втором $ vararray, которого не было в базе данных. Ошибка PDO не печаталась, потому что она была закомментирована в моем классе оператора запроса.

Так что не забудьте включить сообщения об ошибках, ребята.

Вот мое исправление ошибки PDO в моем коде выше:

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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...