获取错误为“SQLSTATE [3D000]:无效的目录名称:1046未选择数据库”

时间:2017-01-27 21:24:49

标签: php mysql pdo

我正在尝试使用php PDO从数据库中选择记录,但收到的错误为“SQLSTATE [3D000]:无效的目录名称:1046未选择数据库”。 我发现了一些类似的可用解决方案,但不幸的是这些解决了我的问题。

这是我的代码

class Database {
     private $servername = "127.0.0.1";
     private $username = "root";
     private $password = "";
     private $dbname = 'demo';
     protected static $con = null;

     function __construct() {
        try {
            self::$con = new PDO( "mysql:host = $this->servername;dbname = $this->dbname", $this->username, $this->password );
            self::$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

            $stmt = self::$con->prepare("select * from test");
            $stmt->execute();
            while($row = $stmt->fetch()){
                print_r($row);
            }
        } catch( PDOException $e ) {
            echo "Connection failed: " . $e->getMessage();
            die;
        }
     }
}

当我执行上面的代码时,我收到了上述错误。 谁能告诉我,我错过了什么?

1 个答案:

答案 0 :(得分:1)

在您的连接字符串中执行以下操作:

self::$con = new PDO( "mysql:host={$this->servername};dbname={$this->dbname}", $this->username, $this->password );

它将帮助php正确解析变量。

或者使用连接:

self::$con = new PDO( "mysql:host=" . $this->servername . ";dbname=" . $this->dbname, $this->username, $this->password );

如手册所示 - 我删除了dsn中的所有空格。