Si desea utilizar esta inserción, debe proporcionar un valor entero en su sql en lugar de una cadena vacía, debería ser así:
INSERT INTO users (id, username, password, first_name, last_name)
VALUES (1, 'lukeduke', '123456', 'Luke', 'Duke')
o si su identificación es autoincremental, puede tener su sql así:
INSERT INTO users (username, password, first_name, last_name)
VALUES ('lukeduke', '123456', 'Luke', 'Duke')
En este caso, este debería ser tu código:
//extracting your first element of the array (id in this case)
$attributes = array_slice($attributes, 1);
$sql = "INSERT INTO ". static::$table_name ." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
Lea más en: