1

私は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
}
4

4 に答える 4

4

いいえ -- 最後の mysqli 関数呼び出しのエラー コードを報告します。ゼロは、最後の関数呼び出しでエラーが発生しなかったことを意味します。そのため、途中で失敗しても、最後だけチェックしていてはわかりません。

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

if (!$mysqli->query("INSERT ...")) {
    printf("Errorcode: %d\n", $mysqli->errno);
}
于 2008-11-26T01:09:41.893 に答える
3

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

于 2008-11-26T01:10:29.740 に答える
1

いいえ、すべてのクエリの間にチェックインする必要はありません。これは、最後のクエリに対してのみエラーが発生するためです...したがって、最初のクエリが失敗し、最後に正しく実行された場合、エラーは発生しません...したがって、すべてのクエリを1つずつ確認してください。ついにではない...

于 2011-02-22T10:47:09.563 に答える
1

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;
    }
}
于 2013-03-19T04:41:27.297 に答える