这可能是一个非常简单的问题,但我找不到解决方案。如果我有
$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?我该如何修复它?谢谢!
我能够重现你的问题。
$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.) 最好按照文档中的说明进行操作。
| 归档时间: |
|
| 查看次数: |
3146 次 |
| 最近记录: |