我正在用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, userEmail) VALUES (?,?)");
...

在这种情况下,我收到以下错误消息:



为什么我需要精确project.users?鉴于数据库名称本身已经在PDO对象中,为什么输入表名称还不够?

谢谢!

JDelage

更新请参阅下面的接受的答案。用dbName=$dbName替换dbname=$dbName可解决此问题。

最佳答案

显然,PDO无法将事件数据库设置为“项目”,因此您需要每次都指定它。

尝试将您的行修改为如下所示:

$dbh=new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);

唯一的区别是dbname拼写为小写,而不是您的dbName

或者,在成功建立连接后执行以下SQL命令:USE project;,例如
$dbh->exec('USE project;');

关于php - 将PHP PDO查询写为 `dbName` .`tableName`而不是 `tableName`-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6300446/

10-11 02:54