Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单php PDO目录名称无效:1046未选择数据库_Php_Mysql_Pdo - Fatal编程技术网

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

简单php PDO目录名称无效:1046未选择数据库,php,mysql,pdo,Php,Mysql,Pdo,这可能是一个非常简单的问题,但我找不到解决办法。 如果我有 $query = $conn->query("SELECT * FROM dbName.users"); 一切正常,但如果没有dbName,则会导致错误: SQLSTATE[3D000]:目录名称无效:1046未选择数据库 这是密码 $Host = "localhost"; $Name = "test"; $User = "test"; $Password = ""; try { $conn =

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

$query = $conn->query("SELECT * FROM dbName.users");
一切正常,但如果没有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();
}
$Host=“localhost”;
$Name=“测试”;
$User=“test”;
$Password=“”;
试一试{
$conn=newpdo(“mysql:host=$host;dbName=$Name”、$User$Password);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$query=$conn->query(“从用户中选择*);
而($r=$query->fetch()){
echo$r['login']。“.$r['pass']。”
”; } }捕获(PDO$e){ 回显“错误:”..e->getMessage(); }
有人知道为什么它只在表名之前使用dbName吗?我怎样才能修好它?
谢谢

我能重现你的问题

$conn = new PDO("mysql:host=$Host;dbName=$Name", $User, $Password);
//                            use dbname instead
显然,DSN字符串中的
dbName
是区分大小写的。它应该是
dbname
。在我改变主意后,它开始工作了



仅供其他人参考,我把它弄乱了一点,看起来DSN中的所有参数名称都是区分大小写的(我在Windows上测试过,有些东西不区分大小写)最好像在中一样进行操作。

因此,当您不包含数据库名称时,它会告诉您未选择任何数据库?看起来您已经在连接字符串中指定了一个数据库。这是您正在使用的实际代码吗?是的,当我不包括数据库名称时,它会告诉我没有选择数据库。当我执行“SELECT*FROM$Name.users”时,它是有效的,但是有没有办法避免反复写入db名称?它只能用表名吗?如果答案解决了你的问题,请考虑接受答案。下面是如何返回此处并对勾号/复选标记执行相同操作,直到其变为绿色。这将通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,并可能希望发布(更多)答案。您将获得积分,并鼓励其他人帮助您。欢迎来到Stack!