我有两个查询,但是pdo->结果显示的是原始结果,而不是下一个结果。我想要结果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
)
) 然后我在同一个查询脚本中使用了另一个具有不同varname的查询。
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();吗?
发布于 2019-05-01 02:19:34
哇哦。容易出错:我在第二个$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());
}
}https://stackoverflow.com/questions/55924899
复制相似问题