2012-04-27 126 views
1

我不明白这个错误,有人可以请解释给我吗?PHP致命错误PDoCtatement fetchColumn()

PHP Fatal error: Call to a member function fetchColumn() on a non-object in /user/dal.php on line 27

我试图获得最后的查询次数,通过使用正则表达式来执行的最后一个查询的新SELECT COUNT(*)查询。问题是$stmt->fetchColumn()导致致命错误,然后我得到Error 500

function dbRowsCount($sql) { 
    global $db; 
    $regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i'; 
    if (preg_match($regex, $sql, $output) > 0) { 
     $stmt = $db->query("SELECT COUNT(*) FROM {$output[1]}", PDO::FETCH_NUM); 
     return $stmt->fetchColumn(); 
    } 

    return false; 
} 

我在做什么错?

+2

您的查询失败,返回而不是语句句柄一个布尔值false。在将其运行到查询调用中以查看哪些内容已损坏 – 2012-04-27 16:37:50

+1

可能希望确保'$ db-query()'在调用'$ stmt'中的任何内容之前成功。 – Sampson 2012-04-27 16:37:51

回答

3

您应该检查您对$db->query的呼叫是否返回有效的PDO对象。事情是这样的:

$stmt = $db->query(...); 
if (! $stmt) { 
    print_r($db->errorInfo()); 
} 
+0

谢谢我现在收到了错误信息:) – Ozzy 2012-04-27 16:41:56

1

可能

$db->query("SELECT COUNT(*) FROM {$output[1]}", PDO::FETCH_NUM); 

失败,所以$语句取假值,你不能在它调用fetchColumn(); 我觉得有什么不对的SQL查询

http://www.php.net/manual/en/pdo.query.php

+0

你是对的它说'你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在''附近使用正确的语法'? AND keycode =?限制1'在第1行)' – Ozzy 2012-04-27 16:42:33

+0

糟糕...我查询没有绑定参数:/ – Ozzy 2012-04-27 16:43:19