尝试读取数据时,在非对象上调用成员函数query()

时间:2012-10-14 07:53:22

标签: php

您好我已经从本书PHP Solutions Dynamic Web Design Made Easy学习了PHP并且已经开始使用mysqli api for database的部分。在编写连接函数并运行脚本之后我得到了这个错误:

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行是指$ result = $ conn-> query($ sql)或die(mysqli_error());. 我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您尝试使用dbConnect('read')创建的$ conn对象;失败。如果你要做一个var_dump($ conn);它可能表明它不是你所面对的。该错误实际上描述了什么是错误的。您尝试使用' - >查询(..'在$ 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)如果构造正常,那么检查你的数据库引擎是否真的在运行:)?