Я довольно плохо знаком с PHP, и у меня возникла очень простая проблема, решение которой я не нашел, несмотря на то, что просматривал похожие вопросы на форуме.
Я пытаюсь подключить PHP с моей базой данных (MySQL) через PDO. Если я ввожу неправильное имя пользователя или пароль, php действительно показывает ошибку в браузере, но если я ввожу неправильное имя базы данных, это не устраняет никаких ошибок. Как это возможно? Мой код выглядит следующим образом:
<?php
try{
$conn = new PDO('mysql:127.0.0.1;dbname=myDb','root','root');
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOexception $e){
echo 'wrong credentials';
}
Мой файл php.ini настроен на отображение ошибок, и Apache был перезапущен после изменения следующих значений:
error_reporting = E_ALL | E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On
Я также попытался использовать следующий код в начале моего скрипта, но он все еще не показывает ошибки, связанные с неправильным именем базы данных
ini_set('display_errors', 1);
error_reporting(~0);
Заранее большое спасибо за вашу помощь, я уверен, что это довольно глупая вещь, но я, честно говоря, не могу понять это.
Это превратилось в довольно сложную ошибку, чтобы найти и объяснить, хотя это довольно просто.
Проблема в том, что DSN строка неверна.
текущая стоимость: 'mysql:127.0.0.1;dbname=myDb'
так должно быть: 'mysql:host=127.0.0.1;dbname=myDB'
нота: host=
скучал.
Тем не менее, PDO не проверяет DSN строка параметров правильно и подключается к базе данных Localhost без каких-либо ошибок.
Тем не менее, он имеет проигнорировал dbname
параметр, так что при попытке запроса вы получите ошибку: 1046 No database selected'
.
Разъяснение того, что происходит (см. Альфредо Дельгадо ниже):
PDO полностью игнорирует некорректный параметр и предполагает, что Localhost
База данных это то, что вы хотите. ; — /
Как упомянул Альфредо Дельгадо:
… «Результатом отсутствия хоста = в dsn было то, что PDO по умолчанию молча использовал localhost. Так как у меня была локальная копия БД, я тратил часы, гоняясь за красными сельдями, как разрешения».
Других решений пока нет …