Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDO代码和PHP未定义错误_Php_Mysql_Pdo - Fatal编程技术网

PDO代码和PHP未定义错误

PDO代码和PHP未定义错误,php,mysql,pdo,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='.$dbh

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

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
在这种情况下是两个不同的东西。

尝试更改为

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

谢谢你这么简单的解释。我明白你的意思。你能告诉我这个东西只有构造函数吗。或者我们不能使用全局变量,它与构造函数无关,只是变量的作用域。读一读:-它将解释所有这些。