为什么setAttribute()函数导致无效参数错误?

时间:2015-05-07 14:55:02

标签: php mysql pdo prepared-statement

我使用带有简单select语句的mysql查询数据库。我使用PDO预处理语句使用一个命名参数,但是我收到HY093错误,我使用了无效数量的参数,这对我来说没有多大意义,因为我只有一个参数。

try {
    $dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=UTF8', DB_USER, DB_PASSWORD);

    // These variables let mysql errors throw PDO Exceptions. http://stackoverflow.com/a/12872698/83916 and http://www.lornajane.net/posts/2011/handling-sql-errors-in-pdo
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    $dbh->setAttribute( \PDO::ATTR_EMULATE_PREPARES, false );
}
catch(PDOException $e) {
    die('pdo connection error: ' . $e->getMessage());
}

$hotel_slug = "sh";
$sql = "select count(*) as count from hotel h where h.hotel_slug = :hotel_slug";
$sql_param[':hotel_slug'] = $hotel_slug;

$sth = $dbh->prepare($sql);

if(!$sth->execute($sql_param)){
    echo "<h2>An error has occurred</h2><br />";
    $error_array = $sth->errorInfo();
    var_dump($error_array);
} else {
    $result_count = $sth->fetchAll(PDO::FETCH_ASSOC);
    $row = current($result_count);
    $count = $row['count'];

    echo "Count: $count<br />";
}

这就是页面上出现的内容:

发生了错误

array (size=3)
  0 => string 'HY093' (length=5)
  1 => null
  2 => null

我意识到由于我打开数据库连接后使用的最后两个setAttribute()函数发生错误。我已经包含了那些,所以如果发生mysql错误,我可以在整个站点的try / catch块上抛出Mysql异常,所以我可以使用该异常数据在用户遇到mysql错误时给自己发错误报告,因为mysql错误没有默认情况下抛出异常。

为什么这些功能会在此页面上导致错误?如何在没有问题的情况下仍然使用它们?

0 个答案:

没有答案