如果出现连接错误,如何在表中插入一行?

时间:2015-04-29 07:59:20

标签: php mysql insert database-connection

如果出现连接错误,我想在表“logs”中输入一条记录,那么我该怎么做?

日志表结构是

create table logs(
id int(20) AUTO_INCREMENT primary key,
class_name varchar(20),
function_name varchar(20), 
error varchar(200),
error_date datetime));

这是我的database.php

<?php
class Database{
    public $server = "localhost";
    public $user = "root";
    public $password = "";
    public $table_name = "";
    public $database_name = "todo_application";
    public $class_name = "Database";
    public $function_name = "";
    public $database_connection = "";

    //Constructor
    public function __construct(){
        //establishes database connection
        $this->database_connection = new mysqli($this->server,
                                                $this->user,
                                                $this->password,
                                                $this->database_name);
        if($this->database_connection->connect_error)
            die("connection failed".$this->database_connection->connect_error);     
    }

    //Destructor
    public function __destruct(){
        //Terminates the database connection
        $this->database_connection->close();
    }

    //Function to run the database query.
    //Input : Database query.
    //Output : Returns array of the result.
    public function run_query($sql_query){
        $this->function_name = "run_query";
        try{
            if(!$this->database_connection){
                $output = $this->database_connection->query($sql_query);
                if($output){
                    $result["status"] = 1;
                    $result["array"] = $output;
                }
                else{
                    $result["status"] = 0;
                    $result["message"] = "Query error";
                }
            }
            else{
                throw new Exception ("Connection error");
            }
        }
        catch(Exception $error){
            $result["status"] = 0;
            $result["message"] = $error->getMessage();
            $this->error_table($this->class_name, $this->function_name, "Connection error", date('Y-m-d H:i:s'));   
        }
        return $result;
    }
    //Function to insert a error in the table
    //Input : class name, function name , error & date.
    public function error_table($class_name, $function_name, $error_message, $date){
            $sql_query = "insert into `logs`( `class_name`, `function_name`, `error`, `error_date`) VALUES ('$class_name', '$function_name', '$error_message', '$date')";
            $this->database_connection->query($sql_query) ;
    }
 ?>

Calling.php

<?php
 include "database.php";
 $connection = new Database();
 $sql_query = "select * from some_tablename";
 $output = $connection->run_query($sql_query);
 ?>

任何人都可以指出我错在哪里,并指导我找到解决方案吗? 提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果您打算在相同的 MySQL实例中记录您无法连接的错误,那么答案是:您可能 这样做。

当您的应用程序无法连接到数据库时,它将无法在其中保存错误消息。

您可以做的是尝试再次连接几次(希望连接错误随后消失),但无法保证您可以建立连接。所以依靠它是不安全的。

替代方法是使用另一个数据库实例来记录问题,将错误记录到文本文件中,发送电子邮件,或者只使用PHP的error_log函数来记录错误。

答案 1 :(得分:0)

可以使用类似

的内容
<?
$connlog = new mysqli(connection for logs)
$connection = new mysqli(database connection)
if($connection->connect_error) {
    //insert to $connlog
?>