PDO代码和PHP未定义错误

时间:2013-03-14 17:05:36

标签: php mysql pdo

我有这个代码连接到数据库

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

出现以下错误,另外在其他类中也无法连接到数据库。

有谁能告诉我这个问题是什么?

2 个答案:

答案 0 :(得分: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是两回事。

答案 1 :(得分:2)

尝试更改为

self::$db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname, $dbusername, $this->dbpassword );