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 함수 호출의 오류 코드를보고합니다. 0은 마지막 함수 호출에서 오류가 발생하지 않았 음을 의미합니다. 따라서 중간에 하나가 실패하면 끝에서만 확인하여 알 수 없습니다.

다시 말해, 예, 각 함수 호출 후에 오류 코드를 확인해야합니다. 오류는 반환 값으로 표시됩니다. $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