我刚刚创建了一个名为" test2"的MySQL数据库。使用PDO。现在我试图创建一个名为" Visiteurs"但似乎我的代码无法正常工作。
回显的错误是:
" 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();
}
有人可以帮我找到错误的位置吗?
答案 0 :(得分:0)
尽管PDO MySQL DSN string documentation并不是关于空格的,但经验告诉我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=
无关紧要。