PHP: функция отображения ошибок класса - PullRequest
0 голосов
/ 20 февраля 2011

Что-то неполное / неправильное в функции класса ошибок ниже?Я никогда не могу получить сообщение об ошибке, если запрос неправильный,

#connects the database and handling the result
class __database {

    protected $connection = null;
    protected $error = null;

    #make a connection
    public function __construct($hostname,$username,$password,$database)
    {
        $this -> connection = new mysqli($hostname,$username,$password,$database);

        if (mysqli_connect_errno()) 
        {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }
    }

    #fetches all result rows as an associative array, a numeric array, or both
    public function fetch_all($query) 
    {
        $result = $this -> connection -> query($query);
        if($result) 
        {

            return $result -> fetch_all(MYSQLI_ASSOC);
        } 
        else
        {
            $this -> error = $this -> connection -> error;
            return $this -> error;
        }
    }

    #display error
    public function get_error() 
    {
        return $this -> error;
    }

    #closes the database connection when object is destroyed.
    public function __destruct()
    {
        $this -> connection -> close();
    }
}

public function get_error() кажется бесполезным в моем классе БД ... Я читал о php Exception, но я нене знаю, как включить его в этот класс БД выше!пожалуйста, сообщите ...

РЕДАКТИРОВАТЬ:

Я пытался изменить код на это,

# return the current row of a result set as an object
    public function fetch_object($query) 
    {
        $result = $this->connection->query($query);
        if($result)
        {
            ...
        }
        else
        {
            __database::get_error();
        }
    }

и функцию класса ошибки,

#display error
    public function get_error() 
    {
        $this->error = $this->connection->error;
        return $this->error;
    }

Так что я подумал, что это должно вызвать функцию get_error (), но все равно ничего не было отображено из функции ошибки ...

1 Ответ

2 голосов
/ 20 февраля 2011

Во-первых, если вы хотите в полной мере воспользоваться классом mysqli, вам следует расширить его и просто переопределить, где это необходимо.

class Database extends mysqli
{
    public function __construct($host = null,$username= null,$password = null,$database = "",$port = null, $socket = null)
    {
         $host     = $host     !== null ? $host     : ini_get("mysqli.default_host");
         $username = $username !== null ? $username : ini_get("mysqli.default_user");
         $password = $password !== null ? $password : ini_get("mysqli.default_pw");
         $port     = $port     !== null ? $port     : ini_get("mysqli.default_port");
         $socket   = $socket   !== null ? $socket   : ini_get("mysqli.default_socket");

         /*
             Perform any custom actions here!
         */

         parent::__construct($host,$username,$password,$database,$port,$socket);
    }

    public function fetch_all($query) /*Overridden*/
    {
        if(false !== ($result = parent::query($query))) //run directly in mysqli
        {
             return $result->fetch_all(MYSQLI_ASSOC);
        }

        return false;
    }

    public function get_error() 
    {
        if($this->errno || $this->error)
        {
            return sprintf("Error (%d): %s",$this->errno,$this->error);
        }
    }
}

Это позволит mysqli обрабатывать ошибки и позволять вам легко получать к ним доступ. Нет смысла создавать класс, который будет просто имитировать класс, а лучше расширять сам класс.

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

Простой пример:

$Database = new Database(null,"root","pass","database");
$Results = $Database->fetch_all("SELECT * from tabe_that_dont_exists");
if($Results === false)
{
     echo $Database->get_error();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...