Я только что создал базу данных MySQL с именем «test2», используя 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(); }
Может ли кто-нибудь помочь мне найти, где ошибка? Спасибо!
Несмотря на то, что в строковой документации PDO MySQL DSN нет специфики в отношении пробелов, опыт говорит мне, что в строке DSN не разрешено пропуски. Поскольку у вас есть dbname = test2
, имя dbname = test2
не анализируется и не используется, поэтому PDO жалуется, что база данных не выбрана. Ваш DSN должен выглядеть следующим образом, без пробелов между парами key=value
:
"mysql:host=$serveur;dbname=test2"
Вы упомянули в комментариях, что предыдущее соединение сработало, и вы смогли выпустить инструкцию CREATE DATABASE
. Это произошло только из-за совпадения хоста по умолчанию, который является localhost
а ваша переменная $serveur
установлена на localhost
. PDO, вероятно, не проанализировал параметр host=
из DSN, но вместо этого использовал localhost
как соединение по умолчанию с вашими учетными данными пользователя. Поскольку для оператора CREATE DATABASE
нет необходимости выбирать базу данных, имя dbname=
не имеет значения.