Sử dụng Ngoại lệ:
try {
$db->query(...);
} catch (Exception $e) {
echo "an error occured during query";
}
Bạn cũng có thể đưa ra các Ngoại lệ của riêng mình đối với đặc biệt cho các lỗi FK:
class ForeignKeyException extends Exception {
public function __construct($msg = 0, $code = 0) {
parent::__construct($msg, $code);
}
}
Khi lỗi FK xảy ra, bạn throw new ForeignKeyException('FK failed');
try {
$db->query(...);
} catch (ForeignKeyException $e) {
echo "FK error";
} catch (Exception $e) {
echo "general error";
}
Cập nhật:
mysqli đã có ngoại lệ:
} catch (mysqli_sql_exception $e) {
if ($e->getCode() == 'CODE FOR FK') {
//...
}
}
Ngoại lệ mysqli PHP: http://php.net/manual/en /class.mysqli-sql-exception.php
Xem mã lỗi MYSQLI: http:// dev. mysql.com/doc/refman/5.6/en/error-messages-server.html
Một câu hỏi hữu ích khác: Xử lý ngoại lệ khóa ngoại trong PHP
Cập nhật cho câu hỏi thứ 2:
Tắt khóa ngoại bằng
SET foreign_key_checks = 0;
<your delete query here>
SET foreign_key_checks = 1;