使用 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 = test2dbname 实际上没有被解析和使用,所以 PDO 抱怨没有选择数据库。您的 DSN 应如下所示,key=value 对之间没有空格:

"mysql:host=$serveur;dbname=test2"

您在评论中提到之前的连接成功并且您能够发出 CREATE DATABASE 语句。那只是因为 default 主机是 localhost 而你的 $serveur 变量也被设置为 localhost 的巧合。 PDO 可能没有解析来自 DSN 的 host= 参数,而是使用 localhost 作为与您的用户凭据的默认连接。由于 CREATE DATABASE 语句不需要选择数据库,因此 dbname= 无关紧要。