Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO语句获取-无法访问空属性_Php_Sql Server_Pdo - Fatal编程技术网

Php 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),然

我真的很困惑

此查询在本地主机上运行良好,但在任何实际的实时服务器上都无法运行。同一数据库上的其他查询也可以工作,因此连接或pdo扩展没有问题

基本上,这就是查询:

$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或类似的话,所以,但我真的很高兴你发布了这篇文章,我把我的代码颠倒过来,寻找这个空属性错误的原因!非常感谢您的分享!:-)