使用 PDO 创建 MySQL Table 时出错
Error when creating MySQL Table with PDO
我刚刚使用 PDO 创建了一个名为 "test2" 的 MySQL 数据库。现在我正在尝试创建一个名为 "Visiteurs" 的 table,但我的代码似乎无法正常工作。
回显的错误是:
"SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected"
(我认为这是错误的)我的代码如下:
$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 string documentation 没有具体说明空格,但经验告诉我 DSN 字符串中不允许出现空格。因为你有 dbname = test2
,dbname
实际上没有被解析和使用,所以 PDO 抱怨没有选择数据库。您的 DSN 应如下所示,key=value
对之间没有空格:
"mysql:host=$serveur;dbname=test2"
您在评论中提到之前的连接成功并且您能够发出 CREATE DATABASE
语句。那只是因为 default 主机是 localhost
而你的 $serveur
变量也被设置为 localhost
的巧合。 PDO 可能没有解析来自 DSN 的 host=
参数,而是使用 localhost
作为与您的用户凭据的默认连接。由于 CREATE DATABASE
语句不需要选择数据库,因此 dbname=
无关紧要。
我刚刚使用 PDO 创建了一个名为 "test2" 的 MySQL 数据库。现在我正在尝试创建一个名为 "Visiteurs" 的 table,但我的代码似乎无法正常工作。
回显的错误是:
"SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected"
(我认为这是错误的)我的代码如下:
$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 string documentation 没有具体说明空格,但经验告诉我 DSN 字符串中不允许出现空格。因为你有 dbname = test2
,dbname
实际上没有被解析和使用,所以 PDO 抱怨没有选择数据库。您的 DSN 应如下所示,key=value
对之间没有空格:
"mysql:host=$serveur;dbname=test2"
您在评论中提到之前的连接成功并且您能够发出 CREATE DATABASE
语句。那只是因为 default 主机是 localhost
而你的 $serveur
变量也被设置为 localhost
的巧合。 PDO 可能没有解析来自 DSN 的 host=
参数,而是使用 localhost
作为与您的用户凭据的默认连接。由于 CREATE DATABASE
语句不需要选择数据库,因此 dbname=
无关紧要。