Я ничего не могу найти в этом. Может быть, это очень просто
У меня есть соединение mysql PDO следующим образом:
try{ $DBH = new PDO("mysql:host=$db_hostname;dbname=$db_database", $db_username, $db_password); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch (PDOException $e){ echo $e->getMessage(); exit; }
Я хочу просто проверить, работает ли соединение, т.е. если пароль, имя пользователя, имя_базы и имя хоста были написаны правильно.
попытка, бросок просто, кажется, забирает фундаментальные ошибки, например, если водитель ошибается. он не бросает ошибку, если говорит, что пароль неправильный.
благодаря
В один клик по этому вопросу в теге PDO теги находится точная инструкция:
$dsn = "mysql:host=localhost;dbname=test;charset=utf8"; $opt = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); $pdo = new PDO($dsn,'root','', $opt);
Как и предупреждение
НЕ используйте оператор try..catch для обработки сообщения об ошибке.
Исключение исключение, которое отлично подходит для этой цели, так как оно будет обрабатывать ошибки PDO точно так же, как и другие ошибки PHP, поэтому вы можете определить поведение, используя параметры сайта. Пользовательский обработчик исключений может быть добавлен позже, но не требуется. Специально для новых пользователей рекомендуется использовать необработанные исключения, поскольку они чрезвычайно информативны, полезны и безопасны. Больше информации…
Я использую следующий код для подключения:
<?php class dbConnection extends PDO{ public function __construct() { switch(DB_TYPE){ case "mysql": $dbconn = "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET; break; case "sqlite": $dbconn = "sqlite:".DB_PATH.";charset=".DB_CHARSET; break; case "postgresql": $dbconn = "pgsql:host=".DB_HOST." dbname=".DB_NAME.";charset=".DB_CHARSET; break; } parent::__construct($dbconn,DB_USER,DB_PASS,array(PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } } ?>
Если я дам неправильный пароль, я получаю
Ошибка соединения, потому что: SQLSTATE [28000] [1045] Доступ запрещен для пользователя «microaid_logger» @ «localhost» (с использованием пароля: ДА)
Как указывал ваш здравый смысл, исключение уже выдается в случае, если соединение не является успешным, что также приведет к ошибке, если пароль неверен. Если вы хотите отформатировать текст сообщения об ошибке или обработать его, просто установите собственный обработчик ошибок, как описано здесь.
Вы можете использовать этот код, чтобы проверить свое PDO-соединение, оно работает для меня
/* PDO connection start */ try { $conn = new PDO("mysql:host=$server; dbname=$sdosmsDB", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->exec("SET CHARACTER SET utf8"); } catch(PDOException $e) { die( 'Database Connection failed: ' . $e->getMessage()); } /* PDO connection end */