5

PDO を使用してデータベースに接続し、ページにいくつかのブログ投稿を表示しようとしています。ただし、次のエラー メッセージが表示されます。

致命的なエラー: 61 行目の index.php のメッセージ「無効なデータ ソース名」を含む例外「PDOException」がキャッチされていません...

私は助けを探していましたが、何が間違っているのか本当にわかりません。

index.php ファイルに含まれる別の connect.inc.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>
            ';
        }
    } ;
    ?>
4

3 に答える 3

11

ガチャ。

何らかの理由で、クラスを PDO から拡張しています。したがって、「blogdata」は DSN として取得されます。

DB クラスを取り除き、生の 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)) {
于 2013-11-02T10:19:36.823 に答える