2012-10-14 29 views
0

您好我一直在学习本书中的php PHP Solutions Dynamic Web Design Made Easy,并进入了必须使用mysqli api来处理数据库的部分。写完连接功能,并运行该脚本,我得到这个错误:在尝试读取数据时调用非对象的成员函数query()

enter image description here

这是我的代码:

function dbConnect($usertype , $connectionType = 'mysqli'){ 
    $host = 'localhost'; 
    $db = 'phpsols'; 
    if($usertype == 'read'){ 
     $user = 'psread'; 
     $pwd = 'Aleczandru1989'; 
    }elseif($usertype == 'write'){ 
     $user = 'aleczandru'; 
     $pwd = 'Aleczandru1989'; 
    }else{ 
     exit('Unrecognized 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; 
     } 
    } 
} 

$conn = dbConnect('read'); 
$sql = 'SELECT * FROM images'; 
$result = $conn->query($sql) or die(mysqli_error()); //Line 5 
$numRows = $result->num_rows; 

在这种情况下,5号线是指$结果= $ conn->查询($ SQL )或死(mysqli_error());. 我在这里做错了什么?

回答

1

您尝试使用dbConnect('read')创建的$ conn对象;失败。如果你想做一个var_dump($ conn);它可能表明它不是你的方面。该错误实际上是描述什么是错的。您试图通过' - > query(..'on $ conn来访问查询函数,但$ conn必须是一个实际上具有查询功能的对象引用,该对象将被创建的点是:

return new mysqli($host , $user , $pwd , $db) 

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

既然你呈现出不同的错误,那么

or die ('Cannot open database'); 

我猜它实际上是在

锣错误
return new PDO("mysql:host=$host;dbname=$db", $user, $pwd); 

你会发现异常。但是由于致命错误,echo声明不再可见。你将不得不在那里做一些调试!

我没有PDO的经验,但对象的构造似乎没问题。 (但这可以帮助你:http://nl1.php.net/manual/en/class.pdo.php#84751)如果构造是好的,比检查你的数据库引擎是否实际运行:)?

相关问题