Необлученное сообщение об ошибке «PDOException» «недопустимое имя источника данных»

Я пытаюсь подключиться к моей базе данных с PDO и показать некоторые блог-страницы на странице. Однако я получаю сообщение об ошибке:

Неустранимая ошибка: исключить исключение «PDOException» с сообщением «недопустимое имя источника данных» в index.php в строке 61 …

Я искал помощь, но на самом деле не могу понять, что не так, поэтому, если кто-нибудь знает, что это очень ценится!

У меня есть отдельный файл connect.inc.php, который включен в файл index.php.

Это файл connect.inc.php:

<?php class DB extends PDO { function database_connection() { $db_host = "localhost"; $db_name = "blogdata"; $db_user = "username"; $db_pass = "password"; try { global $db_host, $db_name, $db_user, $db_pass; $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); } catch(PDOException $e) { die( 'Query failed: ' . $e->getMessage() ); } } } ?> 

И это раздел в файле index.php, который указан в сообщении об ошибке:

 <?php require 'connect.inc.php'; $db = new DB('blogdata'); $query = "SELECT * FROM blogposts"; if ($result = $db->query($query)) { while ($row = $result->fetch(PDO::FETCH_ASSOC)) { echo ' <section id="content"> <article class="post_title"><h3> ', $row['title'],' </h3></article> <article class="post_message"> ', nl2br ($row['message']),' </article> <article class="post_time"> ',$row['time'],' </article> </section> '; } } ; ?> 

Попался.

По какой-то причине вы расширяете свой класс от PDO. Итак, ваши «blogdata» взяты как DSN.

Просто избавитесь от своего класса DB и используйте raw PDO

connect.inc.php:

 <?php $db_host = "localhost"; $db_name = "blogdata"; $db_user = "username"; $db_pass = "password"; $db = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

index.php:

 <?php require 'connect.inc.php'; $query = "SELECT * FROM blogposts"; $result = $db->query($query); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 

Почему вы объявляете свои DB-переменные глобальными после их инициализации? Я не могу его протестировать, но если память будет поддерживать существующие значения из глобальной, перезапишите те, которые вы только что объявили.

Я не согласен с тем, что не использовал унаследованный класс, поскольку возможность писать пользовательский конструктор означает, что вы можете установить все режимы и атрибуты один раз, а затем просто вызвать пользовательский конструктор, чтобы он автоматически выполнялся. Гораздо чище, чем делать это каждый раз.