PDO中的异常PHP不起作用

时间:2014-09-07 07:38:12

标签: php pdo exception-handling

我刚创建了一些代码行,使用带有MySQL数据库的PDO将一些数据插入数据库。 代码如下:

define("cstring", "mysql:host=localhost;dbname=perpus2014");
define("username", "root");
define("password", "");

class database {
    protected $koneksi;
    protected function db() {
        try {
            $koneksi = new PDO(cstring, username, password);
        } catch (Exception $e) {
            echo $e->getmessage();
        }
        return $koneksi;
    }
}

//------------------------------------

class adm extends database {
    private $nama;
    private $password;
    private $conn;

    function __construct() {
        $this->conn = $this->db();
    }

    function set($value1, $value2) {
        $this->nama = $value1;
        $this->password = $value2;
    }

    private function getname() {
        return $this->nama;
    }

    private function getpass() {
        return $this->password;
    }

    public function insert() {
        try {
            $save = $this->conn->prepare("insert intdo tes (nama,password) values (?,?)");
            $save->bindParam(1, $this->getname());
            $save->bindParam(2, $this->getpass());
            $save->execute();
            return true;
        } catch (PDOException $e) {
            print $e->getMessage();
            return false;
        }
    }
}

代码已经成功地将行插入到数据库中,但是当我试图错过拼写代码时,例如" bindParam" to" blindParam"或"插入"到" insseert"或者其他什么,代码在$ save-> execute();

之后继续给出1作为布尔返回值

我的异常有什么问题,为什么它没有打印错误信息并返回false布尔值?

更新后,我发布了完整的代码。

1 个答案:

答案 0 :(得分:0)

  1. 如果你想确定,那个PDO会抛出异常,当发生不好的事情时,请确保将错误模式设置为异常,在你的情况下:$koneksi->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  2. database类的构造函数中,您可能无法创建database对象并返回null。在我看来,如果发生错误,就不应该在那里处理。
  3. 如果您在某个对象上调用不存在的方法,那么处理该解释器错误的对象不是对象的责任。如果PDO类没有inseeert方法,如果您尝试调用该方法,它应该如何负责产生错误?只有在您的数据库代码中出现错误时才会引发PDOException,例如:连接失败,查询中出现语法错误等...
  4. 更新:对于第三个建议:

    $pdo = new PDO( /* params here */ );
    $pdo->query('SELECT * FROM test'); 
    

    在上述情况下,解释器会引发错误,因为PDO类没有查询方法。

    $pdo->query('SLECT * FROM test');
    

    现在,PDO类可以引发异常,因为您的代码(从PHP角度来看)是正确的,但是您提供了一个错误的参数(一个语法错误的查询字符串)。

    我希望它有所帮助。另请阅读Exceptions,如果它还不清楚,可以使用它们。