Зациклите их и удалите поля, которые имеют значение NULL, перед выполнением:
$fields = array(id=>3, name=>NULL, phone=>555-5555)
$attrinutes = array();
foreach ($fields as $field => $value) {
if(isset($value)){
$attributes[$field] = $value;
}
}
$keys = array_keys($attributes);
$values = array_values($attributes);
$sql = "INSERT INTO ". static::$table_name ."(";
$sql .= implode(", ", $keys );
$sql .= ") VALUES (";
$sql .= implode( ", ", array_fill(0, count($attributes) ,'?' ) );
$sql .= ")";
$q = $this->connection->prepare($sql);
$q->execute($values);
*** NOT TESTED ***
Также убедитесь, что в вашей БД установлены поля NULL