【问题标题】:Using $dsn string variable as parameter in database PDO在数据库 PDO 中使用 $dsn 字符串变量作为参数
【发布时间】:2012-12-28 02:43:22
【问题描述】:

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

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

//定义数据库参数

    $dbhost = "localhost";
    $dbname = "x";
    $dbuser = "y";
    $dbpass = "z";

// 调用驱动程序(作为变量字符串)

    $dsn = "mysql:host=$dbhost;dbname=$dbname";

// 连接到新创建的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;

    ?>

【问题讨论】:

    标签: php pdo connection-string dsn


    【解决方案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();
    }
    

    【讨论】:

      【解决方案2】:

      您在哪里寻找它不会有任何问题。用变量替换字符串是可以的,不会导致任何问题。所以,它在别的地方。幸运的是 PHP 报道了它,但奇怪的是,你并没有太在意那个报道。

      似乎有一个未捕获的异常

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

      【讨论】:

      • 谢谢,我开始尊重这个错误处理业务的规则了。我试图让它尽可能简单,只是为了让它启动并运行,但你所说的很有“常识”:),我一定会包括未来的错误消息。再次感谢!
      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2011-10-22
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多