Как правильно подключиться к базе данных MySQL? - PullRequest
1 голос
/ 15 марта 2020

Я пытаюсь подключить MySQL к моей PHP программе. База данных была правильно подключена, так как не показывает никаких сообщений об ошибках при подключении к базе данных. Но когда я пытаюсь извлечь данные из таблицы, выходные данные не показывают никаких выходных данных. Это оставляет пустой экран. Сообщения об ошибках также не отображаются. Отображается только «База данных успешно подключена».

    <?php 
define('user', 'root');
define('pwd', '');

$dsn = "mysql:host=localhost:3307;db_name=mydatabase";
try{
    $db = new PDO($dsn,user,pwd);
    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>";
    }
    $statementss->closeCursor();

}
catch(Exception $e){
    echo $e->getMessage()."<br>";
}
?>

1 Ответ

0 голосов
/ 15 марта 2020

Неясно, есть ли у вас какие-либо значения в базе данных, но сейчас я объясню, как правильно подключиться к базе данных MySQL, используя расширение PDO в PHP.

Есть 3 вещи, которые вам нужно делать всегда при открытии соединения с БД:

  1. Включить отчет об ошибках. В PDO вы можете передать массив $options, содержащий \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, чтобы включить отчеты об ошибках.
  2. Установите правильную кодировку. Наиболее распространенным является utf8mb4. Если вы используете utf8, я настоятельно рекомендую сделать переключатель как можно скорее.
  3. Создайте экземпляр 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>";
}

Не связанные проблемы:

  1. Возможно, вам не нужно closeCursor(). Я не уверен, что идея была в вашем примере.
  2. Всегда полезно отделить логи вашей базы данных c от вашей HTML. Используйте классы или функции для инкапсуляции операций с БД, а затем получите foreach l oop в HTML.
  3. Соглашение о постоянном именовании в PHP заключается в том, что они должны быть написаны в верхнем регистре, чтобы их было легче различить guish.
  4. Рекомендуется отключить эмулированные подготовленные операторы. Вы можете добавить \PDO::ATTR_EMULATE_PREPARES => false к массиву $options.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...