我刚刚使用PDO创建了一个名为"test2"的MySQL数据库。现在我正在尝试创建一个名为"访问者"的表,但似乎我的代码无法正常工作。
回显的错误是:
"SQLSTATE[3D000]: 无效的目录名称: 1046 未选择数据库"
(我认为这是错误的),我的代码如下:
$serveur = "localhost";
$login = "root";
$pass = "root";
try{
$conn = new PDO("mysql:host = $serveur; dbname = test2", $login, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$codesql = "CREATE TABLE Visiteurs (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
email VARCHAR(70)
)";
$conn->exec($codesql);
echo 'Table "Visiteurs" créée !';
}
catch(PDOException $e) {
echo 'Echec : ' . $e->getMessage();
}
有人可以帮我找到错误在哪里吗?
尽管PDO MySQL DSN字符串文档没有具体说明空格,但经验告诉我,DSN字符串中不允许使用空格。 由于您有dbname = test2
,因此dbname
实际上并没有被解析和使用,因此PDO抱怨没有选择数据库。您的DSN应如下所示,key=value
对之间没有空格:
"mysql:host=$serveur;dbname=test2"
您在评论中提到以前的连接成功,并且您能够发布CREATE DATABASE
声明。这只是由于默认主机被localhost
和您的$serveur
变量也设置为localhost
的巧合。 PDO 可能没有从 DSN 解析 host=
参数,而是使用 localhost
作为与用户凭据的默认连接。由于 CREATE DATABASE
语句不需要选择数据库,因此dbname=
无关紧要。