【问题标题】:Getting error as " SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected "收到错误为“ SQLSTATE [3D000]:无效的目录名称:1046 未选择数据库”
【发布时间】:2017-01-27 21:24:48
【问题描述】:

我正在尝试使用 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;
        }
     }
}

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

【问题讨论】:

  • 去掉 DSN 中的空格

标签: php mysql pdo


【解决方案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 中的所有空格。

【讨论】:

  • PHP 可以很好地解析双引号字符串中的$object->property
  • php -r '$obj = new stdClass; $obj->foo="bar"; echo "Here is a property: $obj->foo\n";'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2020-04-14
  • 1970-01-01
  • 2021-12-08
  • 2015-04-29
相关资源
最近更新 更多