Php PDO语句获取-无法访问空属性
我真的很困惑 此查询在本地主机上运行良好,但在任何实际的实时服务器上都无法运行。同一数据库上的其他查询也可以工作,因此连接或pdo扩展没有问题 基本上,这就是查询:Php PDO语句获取-无法访问空属性,php,sql-server,pdo,Php,Sql Server,Pdo,我真的很困惑 此查询在本地主机上运行良好,但在任何实际的实时服务器上都无法运行。同一数据库上的其他查询也可以工作,因此连接或pdo扩展没有问题 基本上,这就是查询: $sql = "SELECT * FROM bksb_Resources"; $query = $this->connection->query($sql, array()); query()方法返回PDOStatement对象 然后我在一个循环中调用$this->connection->fetch($query),然
$sql = "SELECT * FROM bksb_Resources";
$query = $this->connection->query($sql, array());
query()方法返回PDOStatement对象
然后我在一个循环中调用$this->connection->fetch($query)
,然后将其路由到“connection”对象上的一个方法:
所以基本上它是从一个表中选择all,然后返回第一行(这是一个循环,但实际上并不相关)
在localhost上,这很好。没问题
在我的实时服务器上,我得到:
Fatal error: Cannot access empty property in /var/www/html/demo/blocks/elbp/classes/db/MSSQL.class.php on line 652
其中,第652行是上述fetch_pdo方法的返回
在语句运行fetch()之前,我已经打印了该语句,在两台服务器上都可以:
PDOStatement Object
(
[queryString] => SELECT * FROM bksb_Resources
)
我真的没有主意了。我不明白为什么这在一台服务器上有效,而在另一台服务器上无效,而其余的查询在实时服务器上也可以正常工作
(好吧……我说的是其余的,这本来是一个不同的问题,localhost上的查询返回正确的结果,live上的查询没有返回任何结果,即使我在managementstudio上运行copy/pasted查询,它工作得很好……但是在尝试调试时,我遇到了这个问题)
有人有什么想法吗
谢谢
编辑:
调用$this->connection->query($sql,array())代码>
称之为:
/**
* Run an SQL query and return a statement - to be used for things like selecting
* @param type $sql
* @param type $params
* @return type
*/
public function query($sql, $params){
$this->lastSQL = $sql;
$func = 'query_'.$this->extension;
return $this->$func($sql, $params);
}
/**
* Run SQL query using PDO
* @param type $sql
* @param type $params
* @return $st Statement
*/
private function query_pdo($sql, $params)
{
$st = $this->dbh->prepare($sql);
$st->execute($params);
return $st;
}
这就叫:
/**
* Run an SQL query and return a statement - to be used for things like selecting
* @param type $sql
* @param type $params
* @return type
*/
public function query($sql, $params){
$this->lastSQL = $sql;
$func = 'query_'.$this->extension;
return $this->$func($sql, $params);
}
/**
* Run SQL query using PDO
* @param type $sql
* @param type $params
* @return $st Statement
*/
private function query_pdo($sql, $params)
{
$st = $this->dbh->prepare($sql);
$st->execute($params);
return $st;
}
如果您也需要,这是我调用fetch的循环:
$results = array();
while($row = $this->connection->fetch($query)){
$results[] = $row;
}
我最近在PDO和MySQL后端中遇到了这个错误。这是因为我的查询返回一个别名为空的列,如以下查询:
SELECT name as "" FROM users;
这是一个完全有效的查询(从某种意义上说,MySQL将完美地解释和执行它),但当PDO尝试获取数据并且FetchMode设置为PDO::fetch_OBJ时,这将导致“无法访问空属性”致命错误
这应该给任何有相同问题的人一些关于如何解决它的提示。在某个时刻,PDO将实例化一个stdClass,并尝试为查询返回的每个列设置一个属性。当返回名称为空的列时,PDO将基本上执行以下代码:
// $obj is an stdClass instance
$prop = ''; // the name of the query column
$obj->$prop = $value; // the value of the query columns
这导致了“无法访问空属性”的致命错误。什么时候$st
获得了一个值?这是方法的参数是的,但是你什么时候调用了该方法?我已经将其全部添加到了第一个PositUpdate中:这仍然是一个问题,我仍然非常困惑+1我知道我不应该说thx或类似的话,所以,但我真的很高兴你发布了这篇文章,我把我的代码颠倒过来,寻找这个空属性错误的原因!非常感谢您的分享!:-)