mysqli->错误:这是最后一个查询只,或从查询组的最后一个错误?
-
11-07-2019 - |
题
我是新来的mysqli,并试图确认,如果我所以像下面的错误号将被设置为最后一个错误,如果有的话,而不是最后一个查询的错误。
这是一个体面的做法还是应该我在每次查询之间检查错误?
谢谢!
$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函数调用的错误代码。零意味着最后一个函数调用没有发生错误。所以,如果一个在中间失败了,你不会知道它仅在最后检查。
在换句话说,是的,你需要每个函数调用后检查错误代码。请注意,错误是由$mysqli->query()
的返回值指示为好。从转述的例子中的 mysqli_errno DOC:
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;
}
}
不隶属于 StackOverflow