我在这里真的很困惑。
这个查询在 localhost 上运行得很好,但在任何实际的实时服务器上都没有。同一数据库上的其他查询工作,因此连接或 pdo 扩展没有任何问题。
基本上这是查询:
$sql = "SELECT * FROM bksb_Resources";
$query = $this->connection->query($sql, array());
query() 方法返回 PDOStatement 对象
然后我调用$this->connection->fetch($query)
一个循环,它又被路由到“连接”对象上的一个方法:
function fetch_pdo($st)
{
return $st->fetch();
}
所以基本上它是从表中选择所有内容,然后返回第一行(这是一个循环,但这并不真正相关)。
在本地主机上,这很好。没问题。
在我的实时服务器上,我得到:
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 上的查询什么也没返回,即使我在 Management Studio 上运行复制/粘贴查询它工作正常。 ..但在尝试调试时我遇到了这个)。
有人有什么想法吗?
谢谢
编辑:
呼吁$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;
}
如果你也想要它,这就是我调用 fetch 的循环:
$results = array();
while($row = $this->connection->fetch($query)){
$results[] = $row;
}