将PHP PDO查询写为`dbName`.`tableName`而不是`tableName`-为什么?

问题描述

| 我正在用PHP PDO编写用户注册功能,并且我发现我的查询只有在这样编写的情况下才能正常运行:
<?PHP
    $dbHost=\"localhost\";
    $dbname=\"project\";
    $dbUser=\"admin\";
    $dbPassword=\"abcd\";
    $dbh=new PDO(\"MysqL:host=$dbHost;dbname=$dbname\",$dbUser,$dbPassword);
    $dbh->setAttribute( PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION );
    $query=$dbh->prepare(\"INSERT INTO project.users (userName,userEmail) VALUES (?,?)\");
.....
另一方面,如果我这样写,它将无法运行:
...
$query=$dbh->prepare(\"INSERT INTO users (userName,?)\");
...
在这种情况下,我收到以下错误消息:   致命错误:带有消息\'sqlSTATE [3D000]的未捕获异常\'PDOException \':无效的目录名称:1046在C:\\ wamp \\ www \\ Tests \\ Test03 \\ Index.PHP中未选择数据库\': 11堆栈跟踪:#0 C:\\ wamp \\ www \\ Tests \\ Test03 \\ Index.PHP(11):PDOStatement-> execute()#1 {main}抛出C:\\ wamp \\ www第11行的\\ Tests \\ Test03 \\ Index.PHP 为什么我要精确
project.users
?鉴于数据库名称本身已经在PDO对象中,为什么输入表名称还不够? 谢谢! JDelage 更新请参阅下面的接受的答案。用
dbname=$dbname
代替
dbname=$dbname
解决了此问题。     

解决方法

        显然,PDO无法将活动数据库设置为\“ project \”,因此您需要每次都指定它。 尝试将您的行修改为如下所示:
$dbh=new PDO(\"mysql:host=$dbHost;dbname=$dbName\",$dbUser,$dbPassword);
唯一的区别是
dbname
拼写为小写,而不是您的
dbName
。 或者,在成功建立连接后执行以下SQL命令:
USE project;
,例如
$dbh->exec(\'USE project;\');
    ,        尝试:
\"mysql:dbName=$dbName;host=$dbHost\"
\"mysql:dbName=$dbName;host=$dbHost;\"
代替:
\"mysql:host=$dbHost;dbName=$dbName\"
有时顺序很重要。