Неясно, есть ли у вас какие-либо значения в базе данных, но сейчас я объясню, как правильно подключиться к базе данных MySQL, используя расширение PDO в PHP.
Есть 3 вещи, которые вам нужно делать всегда при открытии соединения с БД:
- Включить отчет об ошибках. В PDO вы можете передать массив
$options
, содержащий \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION
, чтобы включить отчеты об ошибках. - Установите правильную кодировку. Наиболее распространенным является
utf8mb4
. Если вы используете utf8
, я настоятельно рекомендую сделать переключатель как можно скорее. - Создайте экземпляр PDO.
Вы должны ловить исключения только в том случае, если знаете, зачем вам это нужно. Не заворачивайте все в пробную ловушку; это ужасная идея Особенно никогда не перехватывайте исключения, просто чтобы вывести сообщение об ошибке; это бессмысленно. Тем не менее, вы можете заключить строку new PDO();
в try-catch, а затем вызвать пользовательское исключение в блоке catch
, если вы не уверены в безопасности.
Имя пары ключ-значение для имени базы данных - dbname
вместо db_name
. Кроме того, при указании порта в DSN выделяется отдельная пара ключ-значение. Возможно, ваша проблема в том, что вы подключались не к тому порту или db_name
не был распознан.
Ваш фиксированный код будет выглядеть так:
<?php
define('user', 'root');
define('pwd', '');
$dsn = "mysql:host=localhost;port=3307;dbname=mydatabase;charset=utf8mb4";
$db = new \PDO($dsn, user, pwd, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false,
]);
echo "Database connected successfully";
$query = "SELECT * FROM student_detail";
$statementss = $db->prepare($query);
$statementss->execute();
$detail = $statementss->fetchAll();
foreach ($detail as $student) {
echo $student['Name']." ";
echo $student['Address']." ";
echo $student['Age']." ";
echo $student['Phone']." ";
echo "<br>";
}
Не связанные проблемы:
- Возможно, вам не нужно
closeCursor()
. Я не уверен, что идея была в вашем примере. - Всегда полезно отделить логи вашей базы данных c от вашей HTML. Используйте классы или функции для инкапсуляции операций с БД, а затем получите
foreach
l oop в HTML. - Соглашение о постоянном именовании в PHP заключается в том, что они должны быть написаны в верхнем регистре, чтобы их было легче различить guish.
- Рекомендуется отключить эмулированные подготовленные операторы. Вы можете добавить
\PDO::ATTR_EMULATE_PREPARES => false
к массиву $options
.