1

mysqli データベース接続を php クラスに渡そうとしています。私がこれまでに持っているコード (簡単にするために省略) は次のとおりです。

db.php

$db_host = 'localhost';
$db_name = 'dbname';
$db_user = 'username';
$db_password = 'password';

$db = array('db_host'=>$db_host, 
    'db_name'=>$db_name, 
    'db_user'=>$db_user,
    'db_password'=>$db_password);

$dbCon = new mysqli( $db['db_host'], 
    $db['db_user'], 
    $db['db_password'], 
    $db['db_name']);

if (mysqli_connect_errno())
{
    die(mysqli_connect_error()); //There was an error. Print it out and die
}

index.php

<?php
    require_once($_SERVER["DOCUMENT_ROOT"] . "/db.php");

    $sql = "SELECT id FROM usr_clients";
    $stmt = $dbCon->prepare( $sql );
    if ($stmt)
    {
        $stmt->execute();
        $stmt->bind_result($id);
        while($stmt->fetch())
        {
            $cl = new Client($id, $dbCon);
            $cl->doIt();
        }
        $stmt->close();
    }
?>

client.php

<?php
    Class Client
    {
        private $con;
        public static $clientCount = 0;

        public function __construct( $id, $con )
        {
            $this->con = $con;

            $sql = "SELECT id FROM usr_clients WHERE id = $id";
            $stmt = $this->con->prepare( $sql );

            if ($stmt)
            {
                echo "it worked!";
            }
            else
            {
                echo "it failed";
            }
        }
}
?>

これで、index.php ページは db.php で宣言されたデータベース接続を正常に認識し、すべてのクライアントのリストを返します。次に、各クライアントをループし、「クライアント」オブジェクトを作成してデータベース接続を渡します。

問題はここから始まります。クライアント クラスでは、データベース接続が認識されません。ページに「失敗しました」という複数のエラーが表示されます。ログには、非オブジェクトでの prepare() の呼び出しに関する行があります。

接続が index.php では機能するのに、クライアント クラスでは機能しない理由を説明できる人はいますか?

ありがとう

4

1 に答える 1