2011-01-08 5 views
2

에있는 비 객체의 멤버 함수 query()를 호출하십시오. 치명적 오류 : 온라인에있는 객체가 아닌 객체에 대한 호출 : $ result = $ conn-> query ($ SQL) 또는 die (mysqli_error());치명적 오류 :

무엇이 잘못되었고 어떻게 고쳐야하는지 누가 압니까?

return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database'); 

do xyz or die() 구조 (즉, 모든 일이 나 표현으로 해석 new mysqli 때문에 한 return 문을 연동 해에 재미 행동에 이르게 :

<?php 
function dbConnect($usertype, $connectionType = 'mysqli') { 
    $host = 'localhost'; 
    $db = 'phpsols'; 
    if ($usertype == 'read') { 
    $user = 'psread'; 
    $pwd = '123'; 
    } elseif ($usertype == 'write') { 
    $user = 'pswrite'; 
    $pwd = '123'; 
    } else { 
    exit('Unrecognized connection type'); 
    } 
    if ($connectionType == 'mysqli') { 
    return new mysqli($host, $user, $pwd, $db) or die ('Cannot open database'); 
    } else { 
    try { 
     return new PDO("mysql:host=$host;dbname=$db", $user, $pwd); 
    } catch (PDOException $e) { 
     echo 'Cannot connect to database'; 
     exit; 
    } 
    } 
} 

// connect to MySQL 
$conn = dbConnect('read'); 
// prepare the SQL query 
$sql = 'SELECT * FROM images'; 
// submit the query and capture the result 
**$result = $conn->query($sql) or die(mysqli_error());** 
// find out how many records were retrieved 
$numRows = $result->num_rows; 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Connecting with MySQLi</title> 
</head> 

<body> 
<p>A total of <?php echo $numRows; ?> records were found.</p> 
</body> 
</html> 

답변

8

범인은 대부분이 라인 결코 거짓이 아니며 "죽는다"는 결코 처리되지 않습니다.). 비슷한 케이스 here을 참조하십시오.

대신이 작업을 수행 :

항상
return new PDO("mysql:host=$host;dbname=$db", $user, $pwd); 

것이다 종료 기능, 결코 :

$result = new mysqli($host, $user, $pwd, $db) ; 
if (!$result) die (....); 
return $result; 

또한, 약간 관련, 나는 당신이 PDO 연결 오류를 잡지 못할 것이라고 생각이 있기 때문에 catch 블록에 도달하십시오. 실제 문제와 마찬가지로 먼저 변수를 $result 변수에 전달해야합니다.

+0

그러나 잘 이해한다면 그 행은 실행되지 않고 있으며, 두 번째 인수없이 함수를 호출하고 있습니다. – AJJ

+0

@AJweb 어떤 라인을 의미합니까? 어떤 기능이 있습니까? –

+0

제 사과, "mysqli"가 기본값으로 설정되었음을 몰랐습니다. – AJJ

5

나는이 대답했습니다 알고 있지만, 단지 가치가 .... 내가 바로이 문제를 해결하기 위해 "새로운 mysqli를 돌려"인터넷 검색을했다

내 자신의 2 센트를 추가 싶었어요. 이 코드는 전자 책 (PHP 솔루션, Dynamic Web Design Made Easy에서 발췌 한 것입니다.) - 제 2 판이 너무 틀리지 않으면! 아이러니하게도이 책은 으로,은 PHP 기본 (이 경우 DB 연결 방법)을 나 자신과 easyrider와 같은 가난한 영혼에게 가르쳐야한다고 가정합니다. 나는이 책이 PHP 코딩에 대한 내 자신의 소개이기 때문에 나는 매우 제한된 이해를 가졌지 만, 실제 객체를 생성하거나 오히려 인스턴스화하여 임시 변수에 전달한 다음 그 변수를 반환하는 것이 솔루션이었습니다.

annoyingly, 이것은 상기 발행물의 초판에서 정확하게 설명되었다.

Google에서 내 게시물을 저장하거나 색인을 생성할지 여부는 모르지만 책을 읽는 다른 사용자에게 도움이 될 수 있습니다. 코드 예에 결함이 있음을 발견하고 글을 쓰는 동안 오류가 표시되지 않습니다. 게시자 웹 사이트의 정오표.

+0

PHP 솔루션을 사용하는 사람들에게 - Dynamic Web Design Made Easy 버전 2, 발행인이 수정을 요청했습니다. [여기] (http://foundationphp.com/phpsolutions/errata_2e.php)에서 확인하십시오. Pekka는 바로 위에있다! –

관련 문제