PHP SQLite3 Check For Constraint Violation
Sometimes we may need to use a constraint in our database design (e.g UNIQUE constraint) and want to be able to handle when such violations occur for logging purposes or others.
The PHP library for SQLite3 provides a way for us to know the last error that happened – its error code and message using
SQLite3::lastErrorCode
and
SQLite3::lastErrorMsg
From SQLite documentation on the error code list
here, you can see that
SQLITE_CONSTRAINT
error code is 19. So to check for a constraint violation, it will look something like this
// $this->db is the SQLite3 object / class instance
$last_error_code = $this->db->lastErrorCode();
$last_error_msg = $this->db->lastErrorMsg();
if( $this->db->lastErrorCode() == self::SQLITE3_CONSTRAINT ) {
// Handle CONSTRAINT violations here
}
However, the SQLite3 library for PHP does not provide a way for us to get extended error code (or at least, i’m unable to find it from their documentation page
here). Hence, to check for exactly which constraint was violated (e.g UNIQUE), you will have to check the
SQLite3::lastErrorMsg
instead.
$last_error_msg = $this->db->lastErrorMsg();
if( strstr($last_error_msg, 'UNIQUE') ) {
//UNIQUE CONSTRAINT VIOLATION ...
}
Be First to Comment