4

私はデータベースに接続するためのこのコードを持っています

class dbConn{
public $dbname='database';
private $dbhost='localhost';
private $dbusername='username';
private $dbpassword='password';


protected static $db;
private function __construct() {

try {

self::$db = new PDO('mysql:host='.$dbhost.';dbname='.$dbname, $dbusername, $dbpassword );
self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {

echo "Connection Error: " . $e->getMessage();
}

}


public static function getConnection() {


if (!self::$db) {

new dbConn();
}


return self::$db;
}

}




class Mysql{

    function showTables(){
                $db = dbConn::getConnection();

                $query=$db->query("show tables");

                $fetchArray = $query->fetchAll(PDO::FETCH_ASSOC);
                foreach($fetchArray as $index=>$val) {
                            echo $val;
                          }
    }
}

$obj=new Mysql;
$obj->showTables();

私が直面している問題は、データベースのログイン詳細を次のようにpdoステートメントに直接使用する場合です。

self::$db = new PDO( 'mysql:host=localhost;dbname=databasename', 'root', 'pass');

問題はありませんが、上記のように使用すると、変数を取得して値を格納します。

Notice: Undefined variable: dbhost 

Notice: Undefined variable: dbname 

Notice: Undefined variable: dbusername 

Notice: Undefined variable: dbpassword

次のエラーが発生します。また、他のクラスでもデータベースへの接続に失敗します。

誰かがこれの問題を教えてもらえますか?

4

2 に答える 2

3

$thisクラスのプロパティにアクセスするときに使用する必要があります -$thisは現在のオブジェクトです。

例:

try {
  self::$db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname, $this->dbusername, $this->dbpassword );
  self::$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
  echo "Connection Error: " . $e->getMessage();
}

呼び出す$dbhostと、現在のスコープ内の変数を探しています。この例ではコンストラクターです。$dbhostこの場合、と$this->dbhostは 2 つの異なるものです。

于 2013-03-14T17:08:09.523 に答える
2

に変更してみてください

self::$db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname, $dbusername, $this->dbpassword );
于 2013-03-14T17:08:43.077 に答える