0

こんにちは、この本PHP Solutions Dynamic Web Design Made Easyから php を学んでいて、データベース用の 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 に答える