PHP Try and Catch for SQL Insert

前端 未结 9 999
南方客
南方客 2020-12-15 18:05

I have a page on my website (high traffic) that does an insert on every page load.

I am curious of the fastest and safest way to (catch an error) and continue if the

9条回答
  •  甜味超标
    2020-12-15 18:29

    You can implement throwing exceptions on mysql query fail on your own. What you need is to write a wrapper for mysql_query function, e.g.:

    // user defined. corresponding MySQL errno for duplicate key entry
    const MYSQL_DUPLICATE_KEY_ENTRY = 1022;
    
    // user defined MySQL exceptions
    class MySQLException extends Exception {}
    class MySQLDuplicateKeyException extends MySQLException {}
    
    function my_mysql_query($query, $conn=false) {
        $res = mysql_query($query, $conn);
        if (!$res) {
            $errno = mysql_errno($conn);
            $error = mysql_error($conn);
            switch ($errno) {
            case MYSQL_DUPLICATE_KEY_ENTRY:
                throw new MySQLDuplicateKeyException($error, $errno);
                break;
            default:
                throw MySQLException($error, $errno);
                break;
            }
        }
        // ...
        // doing something
        // ...
        if ($something_is_wrong) {
            throw new Exception("Logic exception while performing query result processing");
        }
    
    }
    
    try {
        mysql_query("INSERT INTO redirects SET ua_string = '$ua_string'")
    }
    catch (MySQLDuplicateKeyException $e) {
        // duplicate entry exception
        $e->getMessage();
    }
    catch (MySQLException $e) {
        // other mysql exception (not duplicate key entry)
        $e->getMessage();
    }
    catch (Exception $e) {
        // not a MySQL exception
        $e->getMessage();
    }
    

提交回复
热议问题