2012-04-27 3 views
1

이 오류를 이해할 수 없으므로 설명해 주시겠습니까? PDOStatement PHP로 치명적인 오류가 발생했습니다. 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

에 문제가 있다고 생각 대신에 명령문 핸들의 부울 거짓을 반환했습니다. 질의 호출로 실행하여 깨진 내용을보기 전에 선택 쿼리의 복사본을 덤프하십시오. –

+1

'$ stmt'에서 무엇인가를 호출하기 전에'$ db-query()'가 성공적 이었는지를 확인하고 싶을 것입니다. – Sampson

답변

3

$db->query으로 전화하면 유효한 PDO 개체가 반환되는지 확인해야합니다. 이런 식으로 뭔가 :

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

감사합니다. 지금 오류 메시지가 나타납니다. – Ozzy

1

아마

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

실패 그래서 $ stmt를 거짓의 값을 소요하고 당신이 그것을 호출 할 수 없습니다 fetchColumn(); 나는 당신의 쿼리가 실패한 SQL 쿼리

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

+0

당신 말이 맞습니다. '당신은 SQL 구문에 오류가 있습니다; MySQL 서버 버전에 해당하는 설명서를 확인하여 올바른 구문을 사용하여 '?' AND keycode =? LIMIT 1 'at line 1)' – Ozzy

+0

죄송합니다 ... 매개 변수를 바인딩하지 않고 쿼리하고 있습니다 : / – Ozzy

관련 문제