简单的 php PDO 无效目录名称:1046 未选择数据库

nih*_*234 1 php mysql pdo

这可能是一个非常简单的问题,但我找不到解决方案。如果我有

$query = $conn->query("SELECT * FROM dbName.users");
Run Code Online (Sandbox Code Playgroud)

一切正常,但没有 dbName 会导致错误:

SQLSTATE[3D000]:无效的目录名称:1046 未选择数据库。

这是代码

$Host     = "localhost";
$Name     = "test";
$User     = "test";
$Password = "";

try {
    $conn = new PDO("mysql:host=$Host;dbName=$Name", $User, $Password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $query = $conn->query("SELECT * FROM users");
    while($r = $query->fetch()){
        echo $r['login']." ".$r['pass']."<br>";
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道,为什么它只能在表名之前使用 dbName?我该如何修复它?谢谢!

Don*_*nic 5

我能够重现你的问题。

$conn = new PDO("mysql:host=$Host;dbName=$Name", $User, $Password);
//                            use dbname instead
Run Code Online (Sandbox Code Playgroud)

显然,dbName您的 DSN 字符串中的 是区分大小写的。它应该是dbname。我改变后它起作用了。


仅供其他遇到这种情况的人参考,我把它弄乱了一点,看起来 DSN 中的所有参数名称似乎都区分大小写,(我在 Windows 上测试了这个,其中有些东西不是t.) 最好按照文档中的说明进行操作。