未捕获的异常“PDOException”消息“无效的数据源名称”
Posted
技术标签:
【中文标题】未捕获的异常“PDOException”消息“无效的数据源名称”【英文标题】:Uncaught exception 'PDOException' message 'invalid data source name' 【发布时间】:2013-11-13 11:37:16 【问题描述】:我正在尝试使用 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>
';
;
?>
【问题讨论】:
首先,这段代码极其不一致。 DB 类有database_connection()
方法,该方法无处调用。您使用 'blogdata' 参数调用它,但再次没有使用它。它是真的你运行的实际代码吗?
【参考方案1】:
明白了。
出于某种原因,您正在从 PDO扩展您的课程。因此,您的“博客数据”被视为 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))
【讨论】:
谢谢!最后!这解决了问题!但是,我明白您对上述评论的意思。一段时间以来,我一直在尝试使用连接代码,首先我有一个更好的一致代码,当我不知道自己在做什么时,我搞砸了:/将连接包装在一个函数中比使用原始 PDO 更好吗? 只有当你知道你在做什么的时候。事实上,PDO就是已经是这样一个连接处理类了。它几乎拥有普通用户所需的一切。因此,最好保留原始 PDO。 @YourCommonSense,我按照建议做了。但是,它没有从 connect.inc.php 文件中获取内容。例如:我在类中的 index.php 处创建了 2function。一种功能用于插入,另一种功能用于选择。插入工作正常。但是,选择无法获取连接。那么您对此有什么建议吗?【参考方案2】:为什么在初始化数据库变量后将它们声明为全局变量?我无法对其进行测试,但如果内存服务会从全局中提取现有值,覆盖您刚刚声明的值。
我不同意不使用继承类 - 能够编写自定义构造函数意味着您可以设置所有模式和属性一次,然后只需调用自定义构造函数即可自动完成。比每次都做要干净得多。
【讨论】:
【参考方案3】:为了以后的参考,可以保留DB类,参考下面与php类关系不大的解决方案:
enter link description here
【讨论】:
以上是关于未捕获的异常“PDOException”消息“无效的数据源名称”的主要内容,如果未能解决你的问题,请参考以下文章
带有消息“SQLSTATE [42000]”的未捕获异常“PDOException”:语法错误或访问冲突:
致命错误:未捕获的异常“PDOException”和消息“找不到驱动程序”
致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO
致命错误:未捕获PDOException:SQLSTATE [HY093]:参数号无效:无参数
致命错误:第 19 行的 C:\xampp\htdocs\register.php 中抛出未捕获的异常“PDOException”