【问题标题】:How to handle PDO exceptions [duplicate]如何处理 PDO 异常 [重复]
【发布时间】:2011-01-07 10:47:41
【问题描述】:

我正在尝试在 php 上使用 PDO 类,但我很难找到处理错误的正确方法,我已经编写了以下代码:

<?php
// $connection alreay created on a class which works with similar UPDATE statements
// I've simply added here trim() and PDO::PARAM... data type


$id = 33;
$name = "Mario Bros.";
$url = "http://nintendo.com";
$country = "jp";


try {

$sql = "UPDATE table_users SET name = :name, url = :url, country = :country WHERE user_id = :user_id";

$statement = $connection->prepare ($sql);

$statement->bindParam (':user_id', trim($id), PDO::PARAM_INT);
$statement->bindParam (':name', trim($name), PDO::PARAM_STR);
$statement->bindParam (':url', trim($url), PDO::PARAM_STR);
$statement->bindParam (':country', trim($country), PDO::PARAM_STR, 2);

$status = $statement->execute ();

} catch (PDOException $e) {
    print $e->getMessage ();
}

print $status; // it returns a null value, and no errors are reported

?>

这部分代码不报错,只是根本不起作用,底部的var $status,返回一个空值。

谁能帮我找出哪里错了?

【问题讨论】:

    标签: php mysql pdo exception-handling


    【解决方案1】:

    除非您告诉它,否则 PDO 不会抛出异常。你跑了吗:

    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    

    在 PDO 对象上?

    【讨论】:

    • @Matchu:这是默认行为吗?从什么时候开始?!
    • 自从我上一次构建数据库类大约一个月前。至少在我的环境中,静音模式是默认的。
    • 找到了 - us3.php.net/manual/en/pdo.error-handling.php - "PDO::ERRMODE_SILENT - 这是默认模式。"
    • @Matchu:是的,谢谢。如果尝试连接到所请求的数据库失败,PDO::__construct() 仍然会抛出 PDOException
    • 哦,这值得知道。谢谢!
    【解决方案2】:

    您可以在连接mysql时添加一次属性。

    function connect($dsn, $user, $password){
        try {
            $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
            exit;
        }
        }
    

    谢谢

    【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多