Php 在数据库PDO中使用$dsn字符串变量作为参数

Php 在数据库PDO中使用$dsn字符串变量作为参数,php,pdo,connection-string,dsn,Php,Pdo,Connection String,Dsn,目标:简单地从MySQL数据库获取数组 问题:我在PDO语句中使用$dsn“string variable”作为参数,但似乎存在未捕获的异常,它与调用驱动程序或(PDO->_构造)有关--我不确定。您对如何修复$dsn字符串变量或此代码中可能导致其失败的其他区域有何想法?提前谢谢 //定义数据库参数 $dbhost = "localhost"; $dbname = "x"; $dbuser = "y"; $dbpass = "z"; //调用驱动程序(作为变量字

目标:简单地从MySQL数据库获取数组

问题:我在PDO语句中使用$dsn“string variable”作为参数,但似乎存在未捕获的异常,它与调用驱动程序或(PDO->_构造)有关--我不确定。您对如何修复$dsn字符串变量或此代码中可能导致其失败的其他区域有何想法?提前谢谢

//定义数据库参数

    $dbhost = "localhost";
    $dbname = "x";
    $dbuser = "y";
    $dbpass = "z";
//调用驱动程序(作为变量字符串) //连接到新创建的db对象

    $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;

    ?>

将代码放在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();
}

你在哪里找它不会有问题的。用变量替换字符串是可以的,不会导致任何问题。所以,它在别的地方。幸运的是,PHP报告了这一点,但奇怪的是,您对该报告没有太多关注

似乎有一个未预料到的例外

未捕获的异常通常包含错误消息。

大多数PHP错误消息都非常有用。人们必须通读它们才能得到问题的解释。毕竟,它是你唯一的信息来源。除了服务器本身,没有人能告诉您服务器上出了什么问题。如果您在解释错误信息时遇到困难,请将其与您的问题一起发布,让他人为您解释,这是非常重要的。所以,你收到的每一条错误信息,都应该完整地张贴在你的问题中。简单但非常重要的规则

谢谢你,我开始尊重这个错误处理业务的规则。我已经试着尽可能简单地做了,只是为了让它启动并运行,但您所说的非常有“常识”:)并且我将确保包含后续的错误消息。又来了!
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();
}