Intereting Posts
php mysql_connect Предупреждение отключено mysqli_query () возвращает «Таблица не существует» для известной таблицы – Разрешения выдаются? PHP: Шифрование / Расшифровка короткой строки конвертирование не-unicode, не-английского контента в unicode Может ли свойство класса php быть равно другому свойству класса? PHP ob_start vs opcode APC, объясняет различия и реальное использование в мире? Динамическое добавление новых свойств в php? Как я могу выбрать только ближайший родительский узел текстовой строки, используя xpath для каждого соответствия Написание HTML с переменными PHP в файл PDF? Почему оператор конкатенации строки php является точкой (.)? Фильтр и разбиение на страницы на CodeIgniter Выбранное значение выпадающего списка Cakephp не корректно отображается в Firefox, когда страница обновляется ODBC и SQL Server 2008: не можете использовать подготовленные заявления? mysql_real_escape_string () просто создает пустую строку? Создать новый PDF из шаблона с PHP

PHP PDO: невозможно подключиться, неверное имя каталога

Я пытаюсь создать новый сайт на моем хостинге (хост-маршрут, если это имеет значение), но я продолжаю получать эту ошибку, когда я пытаюсь использовать PDO (первый сайт PDO im пытается):

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in /home/kennyi81/public_html/gamersite/login.php:36 Stack trace: #0 /home/kennyi81/public_html/gamersite/login.php(36): PDOStatement->execute() #1 {main} thrown in /home/kennyi81/public_html/gamersite/login.php on line 36 

Когда я использую эти настройки:

 $dbh = new PDO("mysql:91.146.107.11;dbname=kennyi81_gamersite", "kennyi81_gamer", "***************"); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); .... $stmt = $dbh->prepare('SELECT * FROM USERS WHERE ID = :id LIMIT 1'); 

Как выкладывается база данных:

введите описание изображения здесь

Я могу использовать mysqli connect fine на других моих доменах / главном сайте, но я просто не могу заставить PDO работать.

Я пробовал это, что я видел вокруг:

  $stmt = $dbh->prepare('SELECT * FROM gamersite.USERS WHERE ID = :id LIMIT 1'); 

но он перенастраивает синтаксическую ошибку.

Кто-нибудь может понять, что может быть причиной этого?


Все это работает на моем локальном сервере, ничего не изменилось при загрузке, кроме линии соединения.

Вместо:

 $dbh = new PDO("mysql:91.146.107.11;dbname=kennyi81_gamersite", "kennyi81_gamer", "***************"); 

Пытаться:

 $dbh = new PDO("mysql:host=91.146.107.11;dbname=kennyi81_gamersite", "kennyi81_gamer", "***************"); 

(добавить хост = )

И это, скорее всего, работает на вашем локальном сервере, потому что у вас есть mysql:localhost... или mysql:127.0.0.1... там, и он игнорируется (потому что ему не хватает host = aswell), и по умолчанию это localhost.

На странице руководства PDO вы можете увидеть, что вам нужно связать соединение в блоке try/catch . Таким образом, если что-то пойдет не так с подключением, это скажет вам. Что-то вроде этого:

 try { $dbh = new PDO("mysql:91.146.107.11;dbname=kennyi81_gamersite", "kennyi81_gamer", "***************"); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; // Then actually do something about the error logError($e->getMessage(), __FILE__, __LINE__); emailErrorToAdmin($e->getMessage(), __FILE__, __LINE__); // etc. die(); // Comment this out if you want the script to continue execution } 

Причина, по которой вы получаете эту ошибку, связана с тем, что с вашим соединением возникает ошибка, но поскольку вы не говорите, что ваш скрипт останавливается, это не так. Посмотрите на появившееся сообщение об ошибке, и как его исправить следует сделать очевидным. Похоже, что ответ Майкла Прайшнара верен тем, что вы не устанавливаете «хозяина».

Редактировать:

Как оказалось, PDO не жалуется, если вы не укажете свой host или имя dbname в части DSN соединения PDO (по крайней мере, в Unix). Я протестировал его и оставил его пустым, по умолчанию он будет «localhost», и поэтому я смог полностью установить его полностью для локальных соединений, что объясняет, почему оно работает на вашем локальном сервере, но не на вашем рабочем сервере. Фактически, вполне возможно подключить абсолютно ничего не поставлять в DSN, за исключением механизма базы данных:

 $dbh = new PDO("mysql:", "kennyi81_gamer", "***************"); 

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

 if ($dbh->query("USE kennyi81_gamersite") === false)) { // Handle the error } 

Однако, с учетом сказанного, у меня есть сомнения, что вы действительно пытались подключиться, используя блок try/catch (как вы упомянули в своих комментариях), если вы каким-то образом не предоставили действительные учетные данные базы данных. Единственный способ сделать это таким образом не kennyi81_gamersite какой-либо ошибки, если вы действительно правильно подключили и выбрали базу данных kennyi81_gamersite . Если нет, вы бы увидели такое сообщение:

Невозможно подключиться к базе данных. «mysql» сказал: SQLSTATE [28000] [1045] Доступ запрещен для пользователя «kennyi81_gamer» @ «localhost» (с использованием пароля: ДА)

Таким образом, всегда связывайте ваше соединение в блок try/catch если вы хотите найти ошибки во время соединения. Просто убедитесь, что вы не перебросили (и не поймали) getMessage() либо вы можете выставить свои учетные данные.