目标:简单地从MySQL数据库中获取数组。
问题:我使用$ dsn“字符串变量”作为PDO语句中的参数,但似乎有一个未捕获的异常,它与调用驱动程序或(与PDO-> __构造) - 我不确定。您对如何修复$ dsn字符串变量或此代码的其他可能导致其失败的区域有任何想法吗?提前谢谢。
//定义数据库参数
$dbhost = "localhost";
$dbname = "x";
$dbuser = "y";
$dbpass = "z";
$dsn = "mysql:host=$dbhost;dbname=$dbname";
//连接到新创建的数据库对象
$dbh = new PDO($dsn, $dbuser, $dbpass);
//设置PDO错误模式以启用例外
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
//执行对数据库的查询
$sql = "SELECT * FROM a_aif_remaining";
$sth = $dbh->prepare($sql);
$sth->execute();
//显示查询结果
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name");
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print("");
return $results;
//关闭数据库连接
$dbh = NULL;
?>
答案 0 :(得分:1)
将您的代码放在try catch块中。并查看报告的错误消息。以下是一个例子:
try
{
if ( !class_exists( 'PDO' ) )
throw new Exception( 'PHP without PDO' );
if ( array_search( PDO::getAvailableDrivers(), 'mysql' ) === false )
throw new Exception( 'PHP without PDO mysql driver' );
$dbh = new PDO( ... );
...
}
catch ( PDOException $e )
{
print $e->getMessage();
}
catch ( Exception $e )
{
print $e->getMessage();
}
答案 1 :(得分:0)
在寻找它的地方不会有任何问题。用变量替换字符串是可以的,不会导致任何问题。所以,它在其他地方。幸运的是,PHP报告了它,但奇怪的是,你并没有太多关注那份报告。
似乎有未被捕获的异常
未捕获的异常通常包含错误消息 大多数PHP错误消息都非常有用。人们必须阅读它们才能得到问题的解释。毕竟,唯一是您的信息来源。没有人能告诉你服务器上有什么问题但是服务器本身。如果您在解释错误消息时遇到困难 - 将必要与您的问题一起发布,以便让人们为您解释。因此,您收到的每条错误消息都应该在您的问题中发布,完整且完整。简单但非常重要的规则。