2012-05-22 4 views
0

아웃 내가PDO 함수는 setFetchMode

을 시도하고 있었다 넣어 내가 PDO와 기능을 만들려고 노력하지만 오류 (PDO 새로운) 여기 여기 내가로부터 행을 계산 할

function mail_id($mail){ 
    global $host, $dbname, $user, $pass; 
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    $STH = $DBH->query("select count(from) from messages where from = '$mail'"); 
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
    $row = $STH->fetch(); 
    return $row; 
} 

내 코드가와를 얻고 있었다 안녕하세요입니다

$mail=mail_id($userid); 
if (0<count($mail['to_viewed'])) {echo "green";} else {echo "gray";} 

이 은 들으

도와주세요 오류

Call to a member function setFetchMode() on a non-object 

입니다 0

+0

아마도 당신의 SQL 문은 명령문에 오류가? "from"이라는 이름의 열 (예 :'count (from) ')을 가질 수 있는지 여부는 알 수 없습니다. 틱 마크 등으로 포장해야 할 수도 있습니다. – Quantastical

+0

이름이 FROM – Harinder

+0

인 열이 있습니다. FROM은 SQL의 키워드입니다. 열을 설명 할 때 SQL 문에서 눈금으로 포장해야합니다. – Quantastical

답변

1

PDO::query()의 반환 값을 확인해야합니다. (못생긴) PHP에는 혼합 유형의 값을 반환하는 많은 함수가 있습니다.

설명 :
PDOStatement PDO::query (string $statement)
...

은 항상 같은데 설명서의 프로토 타입이 다른 것을 말한다 있지만 PDO::query()의 경우, 반환 유형은 어느 PDOStatement 또는 부울입니다 PDOStatement을 반환합니다.

반환 값 :
PDO :: 쿼리()는 PDOStatement 객체, 실패 할 경우 FALSE를 반환합니다.

모든 경우가 아님! 따라서 반환 된 값이 PDOStatement이라는 보장은 없습니다.

올바른 프로토 타입은 다음과 같습니다

설명 :
mixed PDO::query (string $statement)
귀하의 경우에는 ...

쿼리가 유효 (열로 FROM 같은 예약 된 키워드를 사용하여 name) 값은 FALSE 인 boolean 유형의 리턴 값이됩니다. 부울 값은 객체가 아니므로 $STH->setFetchMode()에 대한 호출이 실패합니다.

당신의 PDO에 따라 :: 당신이 반환 값을

  • 경고를 확인할 필요가 없습니다 ATTR_ERRMODE 당신은

    • 예외 (PDO :: ERRMODE_EXCEPTION)를 얻을 수 (PDO :: ERRMODE_WARNING 당신이 반환 값을 확인해야하므로)
    • 아무것도 (PDO :: ERRMODE_SILENT을), errorCode()errorInfo()