在数据库类php中实现try catch

时间:2011-08-19 14:32:05

标签: php class try-catch

下面这是我在php中的类数据库

<?php
class DB
{

    private $SQLcommand;
    private $bd;

    public function setSQLcommand($valor)
    {
        $this->SQLcommand = $valor;
    }
    public function getSQLcommand()
    {
        return($this->SQLcommand);
    }

    function __construct()
    {
        $this->bd = new PDO("mysql:host=localhost;dbname=cpd", "root", "");

    }
    public function ExecSQL()
    {
        if ($this->SQLcommand != "")
            return($this->bd->exec($this->SQLcommand));
        else
            return(false);
    }   
    public function ExecSelect()
    {
        if ($this->SQLcommand != "")
        {
            $data = $this->bd->query($this->SQLcommand);
            return($data->fetchAll());


        }
        else
            return(false);
    }
    function __destruct()
    {
        $this->bd = null;
    }

}
?>

以下是我实例化的方式

include_once 'db_class.php';

$e = new DB();
$e->setSQLcommand("INSERT INTO characteristic (id_charac,name_charac)
                VALUES ('','".$_POST["nomecharac"]."')");
$e->ExecSQL();


$p = new DB();
$p->setSQLcommand("select * from characteristic");                  
$data = $p->ExecSelect();

我会问我在代码中的哪个位置我可以尝试一下catch,如果发生错误,try catch会重定向到文件maintenance.php,并阻止银行的用户和密码显示...谢谢大家。 ..

3 个答案:

答案 0 :(得分:2)

首先,我要使用准备好的陈述;有人可以将他们想要的东西放到$ _POST [“nomecharac”]中,这可以让他们运行他们想要的命令。

至于放置try-catch的位置,如果你想要总是重定向到maintenance.php,请把它放在类中。否则,将它放在实例化中。

干杯!

答案 1 :(得分:2)

您可以输入构造函数__construct()

try {
    $this->bd = new PDO("mysql:host=localhost;dbname=cpd", "root", "");
} catch (PDOException $e) {
    die('Database connection could not be established.');
}

答案 2 :(得分:1)

您的数据库类不应该知道您的应用程序必须重定向到特定页面,只知道发生了异常。

  1. 让数据库类抛出异常。
  2. 在您的应用程序中捕获异常并采取措施。