dongsu4345 2017-07-13 17:51
浏览 86
已采纳

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

This may be really simple issue, but I can't find solution. If I have

$query = $conn->query("SELECT * FROM dbName.users");

everything works fine, but without dbName it cause error:

SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected.

Here is the code

$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();
}

Does anyone knows, why it works only with dbName before table name? How can i fix it? Thanks!

  • 写回答

1条回答 默认 最新

  • du1843 2017-07-13 18:02
    关注

    I was able to reproduce your problem.

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

    Apparently the dbName in your DSN string is case sensitive. It should be dbname. After I changed that it worked.


    Just FYI for anyone else who happens upon this, I messed with it a bit more, and it looks like all of the parameter names in the DSN seem to be case sensitive, (and I was testing this on Windows, where some things aren't.) Better just do it like it looks in the documentation.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 个人网站被恶意大量访问,怎么办
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制