0

嗨,我一直在从这本书中学习 php PHP Solutions Dynamic Web Design Made Easy并进入了我必须使用 mysqli api 来处理数据库的部分。在编写连接函数并运行脚本后,我收到此错误:

在此处输入图像描述

这是我的代码:

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());。我在这里做错了什么?

4

1 回答 1

1

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

于 2012-10-14T08:00:09.730 回答