5

我正在尝试使用 PDO 连接到我的数据库并在页面上显示一些博客文章。但是我收到此错误消息:

致命错误:第 61 行 index.php 中的未捕获异常“PDOException”和消息“无效数据源名称”...

我一直在寻求帮助,但真的无法弄清楚出了什么问题,所以如果有人有任何想法,非常感谢!

我有一个单独的 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>
            ';
        }
    } ;
    ?>
4

3 回答 3

11

明白了。

出于某种原因,您正在从 PDO扩展您的课程。因此,您的“博客数据”被视为 DSN。

只需摆脱您的 DB 类并使用原始 PDO

连接.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);

索引.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 回答
0

为什么在初始化数据库变量后将它们声明为全局变量?我无法测试它,但如果内存服务将从全局中提取现有值,覆盖您刚刚声明的值。

我不同意不使用继承的类——能够编写自定义构造函数意味着您可以设置所有模式和属性一次,然后调用自定义构造函数自动完成。比每次都做要干净得多。

于 2013-11-02T10:58:30.083 回答
0

对于将来的参考,您可以保留 DB 类并参考以下与 php 类没有太大关系的解决方案:

在此处输入链接描述

于 2019-01-20T20:07:38.340 回答