Intereting Posts
Symfony2 – определить, находится ли пользователь в защищенном брандмауэре Каковы недостатки использования постоянного соединения в PDO Как можно разобрать gettext .mo-файлы в PHP4, не полагаясь на setlocale / locales? mySqli … внутреннее соединение? Выполняется ли выполнение php после того, как пользователь покидает страницу? Html File Save – Как преодолеть ограничение 2K для GET. (Примечание: POST не работает) JQuery Ajax success: function () Создание экземпляра класса PHP. Использовать или не использовать круглые скобки? PHP Предупреждение: Неизвестно: произошла ошибка при закрытии оператора в Unknown в строке 0 Предложение MySQL Query IN () Медленное индексирование столбца Обработка исключений внешних ключей в PHP Вызов функции-члена getAction () для объекта без объекта Инструмент моделирования UML для php Объекты группировки php simplexml Content-type, не изменяющийся с помощью CURLOPT_HTTPHEADERS

Напишите PHP PDO-запросы как `dbName`.`tableName` в отличие от` tableName` – почему?

Я пишу функцию регистрации пользователя в 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 ? Почему этого недостаточно, чтобы ввести имя таблицы, учитывая, что имя db уже находится в объекте PDO?

Спасибо!

JDelage

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

По-видимому, PDO не смог установить активную базу данных как «проект», и поэтому вам нужно указывать ее каждый раз.

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

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

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

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

 $dbh->exec('USE project;'); 

Пытаться:

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

вместо:

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

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