我有这段代码连接到数据库
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
出现以下错误,在其他类中也无法连接到数据库。
谁能告诉我这是什么问题?
最佳答案
访问类属性时需要使用$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
在这种情况下是两个不同的东西。
关于php - PDO 代码和 PHP 未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415694/