Записывать запросы PHP PDO как `dbName` .tableName` вместо` tableName` - почему? - PullRequest
5 голосов
/ 10 июня 2011

Я пишу функцию регистрации пользователя в PHP PDO, и я обнаружил, что мой запрос будет работать нормально, только если он написан так:

<?php
    $dbHost="localhost";
    $dbName="project";
    $dbUser="admin";
    $dbPassword="abcd";
    $dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
.....

С другой стороны, он не запустится, если я напишу:

...
$query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
...

В этом случае я получаю следующее сообщение об ошибке:

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [3D000]: неверное имя каталога: 1046 База данных не выбрана» в C: \ wamp \ www \ Tests \ Test03 \ Index.php: 11 Трассировка стека: # 0 C: \ wamp \ www \ Tests \ Test03 \ Index.php (11): PDOStatement-> execute () # 1 {main} в C: \ wamp \ www \ Tests \ Test03 \ Index.php в строке 11

Почему мне нужно уточнить project.users? Почему недостаточно ввести имя таблицы, учитывая, что само имя БД уже находится в объекте PDO?

Спасибо!

JDelage

ОБНОВЛЕНИЕ Пожалуйста, смотрите принятый ответ ниже. Замена dbName=$dbName на dbname=$dbName решает эту проблему.

Ответы [ 2 ]

11 голосов
/ 10 июня 2011

Очевидно, что PDO не удалось установить активную базу данных как "проект", и поэтому вам нужно указывать ее каждый раз.

Попробуйте изменить строку так, чтобы она выглядела следующим образом:

$dbh=new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);

Единственная разница в том, что dbname пишется строчными буквами вместо вашего dbName.

Либо выполните эту команду SQL после успешного установления соединения: USE project;, например

$dbh->exec('USE project;');
0 голосов
/ 28 мая 2012

Попробуйте:

"mysql:dbName=$dbName;host=$dbHost"
"mysql:dbName=$dbName;host=$dbHost;"

вместо:

"mysql:host=$dbHost;dbName=$dbName"

иногда важен порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...