我正在尝试使用PDO连接到我的数据库并在页面上显示一些博客帖子。 但是我收到此错误消息:
致命错误:未捕获的异常'PDOException',消息'无效 数据源名称'在第61行的index.php中......
我一直在寻求帮助,但真的无法弄清楚出了什么问题,所以如果有人有任何想法,我们非常感谢!
我有一个单独的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>
';
}
} ;
?>
答案 0 :(得分:9)
疑难杂症。
出于某种原因,您从PDO扩展您的课程。因此,您的“博客数据”将被视为DSN。
摆脱你的数据库类并使用原始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)) {
答案 1 :(得分:0)
为什么在初始化后将数据库变量声明为全局?我无法测试它,但如果内存用于从全局中提取现有值,则覆盖您刚刚声明的值。
我不同意不使用继承的类 - 能够编写自定义构造函数意味着您可以设置所有模式和属性一次,然后只需调用自定义构造函数即可自动完成。比每次必须做的更清洁。
答案 2 :(得分:0)
对于以后的参考,您可以保留DB类,并参考与php类无关的以下解决方案: