Как обновить NULL / 0 в mysql (редактирование страницы)?

в общем такая ситуация. Вызываю на редактирование страницу из базы, загружаются для редактирования все поля по (describe), в поля которые заполнены помещаются значения по умолчанию которые есть в базе, в поля у которых нет значений открываются пустыми, вот пример вывода этих полей:

if ($colums[$key] == 'partner_id') {
    echo "<select class='form-control' name='partner_id'>";
    echo "<option value=''>выбрать партнера</option>";        
    $partner  = DBselect('id,name,email','users','access','partner',false);
    foreach ($partner as $rows) {
        if ($service['partner_id'] == $rows['id']) {
            echo "<option selected='selected' value='{$rows['id']}'>{$rows['name']} / {$rows['email']}</option>";
            continue;
        }
    echo "<option value='{$rows['id']}'>{$rows['name']} / {$rows['email']}</option>";
    }
    echo "</select></br>"; 
    }
    if ($colums[$key] == 'partner_bonus') {
    echo "<input class='form-control' value='{$service['partner_bonus']}' type='number' name='{$colums[$key]}' placeholder='Менеджерский процент'><br>";
    }

Я хочу избавится от обязательства заполнения всех полей, например хочу отредактировать, только 1 значение и сохранить, и возникает проблема, что на всех полях где не заполненно выходит ошибка:

Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect date value: '' for column arenda_db.service.data_end at row 1 in

Понятно, я пытаюсь передать пустое значение, и он ругается. При создании поля (ИНСЕРТЕ) я чищу массив, и те поля которые не указаны просто удаляю, и таким образом записываю только заполненные поля. С помощью вот такой функции (только не хахочите слишком громко):

function cleandata($_data):array {
    foreach ($_data as $key => $value) {
        if ($_data[$key]) {
            $return_data[$key] = $value; 
        }
    }
    return $return_data;
}

Потом отдаю в ИНСЕРТ, и он записывает все поля. Однако, на обновление информации я ее использовать не могу, так как бывают случаи когда нужно не отредактировать информацию в записи, а удалить и установить значение NULL в базе, и в таком случае эта функция перед обновление убирает это значение из обновления.

Я пробывал в значению по умолчанию на select ставить типа:

<option value='NULL'>выбрать партнера</option>";   

Это не как не помогло, кроме того. Выручает если везде проставлять по умолчанию значение "0", но во первых это треш, а во вторых поля типа:

echo "<input value='{$service['data_end']}' class='form-control' type='date' name='{$colums[$key]}'></br>";

Ругаются, на ноль тоже.

Прошу подсказать в каком направлении действовать, что бы создать свободную форму обновления, которая может и удалить значение, установив в базе NULL, а так же обновлять только частичную информацию спасибо. Заранее спасибо, извините если вопрос глупый.

Мои обновлятор базы:

function DBupdadeAll($_table, array $_data_update,$_where_name): bool
{
    global $pdo;
    $_data_str_update = '';
    $i = 0;
    foreach ($_data_update as $key => $value) {
        //echo "$key";
        //echo "$value";
        if($i != count($_data_update)-1){
        $x = "`$key` =:$key, ";
        $_data_str_update.=$x; 
       }
       else{
        $x = "`$key` =:$key ";
        $_data_str_update.=$x; ; 
        }
        $i++;
    }
    $sql = $pdo->prepare("UPDATE {$_table} SET $_data_str_update WHERE `$_where_name`=:$_where_name");
    if (!$sql) {
         echo "\nPDO::errorInfo():\n";
         print_r($pdo->errorInfo());
     }
    $sql->execute($_data_update);
    echo 'Запись обновлена';
    return true;
}

Ответы (1 шт):

Автор решения: Леонид Басов

Пустые строчки в input - value='' перед добавлением в базу данных, нужно проверить и заменить на значение NULL, для этого в функцию DBupdadeAll добавления добавил код:

foreach ($_data_update as $key => $value) {
            if (empty($_data_update[$key])) {
                $_data_update[$key] = NULL;
            }
        }

После этого все разработало. Спасибо Mike что помог разобраться.

→ Ссылка