mysqli-> error:最後のクエリのみですか、それともクエリグループからの最後のエラーですか?

StackOverflow https://stackoverflow.com/questions/319423

質問

mysqliを初めて使用します。以下のようにすると、errnoは最後のクエリのエラーではなく最後のエラーに設定されることを確認しようとしています。

これは適切なプラクティスですか、それともすべてのクエリの間にエラーをチェックする必要がありますか?

ありがとう!

$mysqli->autocommit(FALSE);

$mysqli->query("INSERT INTO .....");
$mysqli->query("INSERT INTO .....");
$mysqli->query("INSERT INTO .....");
$mysqli->query("INSERT INTO .....");
$mysqli->query("INSERT INTO .....");

if ( 0==$mysqli->errno ) {
    $mysqli->commit();
} else {
    $mysqli->rollback();
    // Handle error
}
役に立ちましたか?

解決

mysqli_errno— 最新の関数呼び出しのエラーコードを返します。

他のヒント

いいえ-最後のmysqli関数呼び出しのエラーコードを報告します。ゼロは、最後の関数呼び出しでエラーが発生しなかったことを意味します。そのため、中間の1つに障害が発生した場合、最後のチェックのみではそのことを知ることができません。

つまり、はい、各関数呼び出しの後にエラーコードを確認する必要があります。エラーは $ mysqli-> query()の戻り値によっても示されることに注意してください。 mysqli_errno ドキュメントの例を言い換えます:

if (!$mysqli->query("INSERT ...")) {
    printf("Errorcode: %d\n", $mysqli->errno);
}

いいえ、すべてのクエリの間にチェックインする必要があります。常に最後のクエリに対してのみエラーが発生するためです...最後に一つずつ...

すべてのエラーをキャッチするためのIMOの最良の方法および最も簡単な方法は、mysqliクラスを拡張することです。

class DBException extends Exception {
}
class DBConnectException extends DBException {
}
class DBQueryException extends DBException {
}

class DB extends MySQLi {
    private static $instance = null;

    private function __construct() {
        parent::__construct('host',
                            'username',
                            'passwd',
                            'dbname');

        if ($this->connect_errno) {
            throw new DBConnectException($this->connect_error, $this->connect_errno);
        }
    }

    private function __destructor() {
        parent::close();
    }

    private function __clone() {
    }

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function query($query, $resultmode = MYSQLI_STORE_RESULT) {
        $result = parent::query($query, $resultmode);
        if (!$result) {
            // or do whatever you wanna do when an error occurs
            throw new DBQueryException($this->error, $this->errno);
        }
        return $result;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top