реализовать try catch в базе данных класса php - PullRequest
2 голосов
/ 19 августа 2011

здесь ниже моя база данных классов в 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();

Я бы спросил, где в коде я могу поставить попытку поймать, что в случае возникновения ошибки try catch перенаправляет в файл maintenance.php и предотвращает отображение имени пользователя и пароля банка ... спасибо всем ...

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Вы можете поместить в свой конструктор __construct ()

try {
    $this->bd = new PDO("mysql:host=localhost;dbname=cpd", "root", "");
} catch (PDOException $e) {
    die('Database connection could not be established.');
}
2 голосов
/ 19 августа 2011

Во-первых, я бы использовал подготовленные заявления;кто-то может поместить то, что он хочет, в $ _POST ["nomecharac"], который может позволить им запустить команду, которую он хочет.

Что касается того, куда поместить try-catch, если вы хотите, чтобы всегда был редиректв maintenance.php, поместите его в класс.В противном случае поместите его в экземпляр.

Приветствия!

1 голос
/ 19 августа 2011

Ваш класс базы данных не должен знать, что ваше приложение должно перенаправлять на определенную страницу, только если произошло исключение.

  1. Пусть класс базы данных генерирует исключения.исключение в вашем приложении и принять меры.
...