php Mysql - PDO错误-目录名称无效:1046未选择数据库

holgip5t  于 2023-03-16  发布在  PHP
关注(0)|答案(9)|浏览(152)

我有一个PDO的问题,我看到绝对没有他来的地方。我不能质疑我的MySQL数据库。只是为了测试我使用了以下代码(有相当酸之前配置的连接参数:

$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

var_dump($dbh);    // gives : object(PDO)#1 (0) { }

$res=$dbh->query('SELECT * FROM table');

连接是正确的MySQL,但查询后,我得到这个错误:
致命错误:未捕获异常“PDOException”并显示消息“SQLSTATE[3D 000]:无效的目录名:1046没有选择数据库' in /home/outout/public_html/file.php:16堆栈跟踪:#0 /主页/输出/公共_html/文件.php(16):PDO-〉查询('select * from t...')#1 {main}在第16行的/home/outout/public_html/file. php中抛出。
这段代码可以在本地机器上运行,但是我一把它放到网上(cPanel)它就显示这个错误。我必须在.htaccess中配置PDO吗?
我完全不明白问题出在哪里。有人会有办法吗?

fykwrbwg

fykwrbwg1#

您犯了一些错误或打字错误。请确保数据库 * 存在于您要连接的服务器 * 上,并在DSN中正确设置,如下所示

dbname=Mydatabase;

没有空格或其他符号。字符大小写也很重要。

$dbh = new PDO('mysql:host=serverName;dbname=Mydatabase;charset=utf8mb4','user','pass');

应该可以

1tu0hz3e

1tu0hz3e2#

我遇到了同样的问题,但没有在“mysql”(mysql:host)中提到“host”字符串,我通过以下代码解决了这个问题。

$dsn="mysql:host=localhost;dbname=dbname";
$pdo = new PDO($dsn,"root","");
tyg4sfes

tyg4sfes3#

取代:

$res=$dbh->query('SELECT * FROM table');

只要做到:

$res=$dbh->query('SELECT * FROM dbname.tablename');

你就可以走了。

sigwle7e

sigwle7e4#

我遇到了同样的问题。解决问题的方法是删除hostname和dbname变量之间的空格,如下所示:发件人:$conn =新PDO(“mysql:主机= $服务器名;数据库名称= $数据库名称”,$用户名,$密码);
收件人:$conn =新PDO(“mysql:host=$服务器名;数据库名称=$数据库名称”,$用户名,$密码);

vq8itlhq

vq8itlhq5#

$dbh= new PDO('mysql:host=serverName;dbname=Mydatabase','user','password');

这是错误的,你不能有主机=服务器名,相反,你需要有像主机=$服务器名,然后$服务器名=“服务器名.域”;与dbname=Mydatabase相同,您需要将这些变量$Mydatabase=“mydatabase”设置为如下所示:

$servername = "servername";
$username = "username";
$password = "password";
$dbname = "dbname";

    try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Connection ok!";
    } catch (PDOException $e) {
    echo "Err: " . $e->getMessage();
    }

    $conn = null;

这将起作用。更多详细信息:http://www.w3schools.com/php/php_mysql_connect.asp
我也有同样的错误,这是因为我没有在字符串中使用dbname=$dbname,而是使用了$dbname=$dbname,这只是一个打字错误。您需要正确地编写字符串!

drnojrws

drnojrws6#

让我感到困惑的是,我从MySQL工作台的树中复制了数据库名称,并将其粘贴到settings.php文件中。结果发现字符串开头和结尾的撇号是假撇号!我删除了它们,并放入了真实的的撇号,所有东西都启动了。我花了几个小时才弄明白。希望这对其他人有所帮助。

hjzp0vay

hjzp0vay7#

使用关键字相同的dbname不更改它们

public function conect(){
        $this->conn = null;
        
        try {

       $this->conn = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name, $this->username, $this->password);
     //    $this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
        echo 'Connection Error: ' . $e->getMessage();
      }
        return $this->conn;

    }
tpxzln5u

tpxzln5u8#

对于面临同样问题的任何人,如果在dsn中在dbname之前键入port,则会给出相同的错误
所以更换了

$dsn = "mysql:host=$this->host;port:$this->port;dbname=$this->db;charset=UTF8;";

$dsn = "mysql:host=$this->host;dbname=$this->db;port:$this->port;charset=UTF8;";

请注意端口数据库名称的顺序

bsxbgnwa

bsxbgnwa9#

用途

$database -> query(' SELECT * FROM "database_name"."table_name" ');

代替

$database -> query(' SELECT * FROM "table_name" ');

相关问题