Se ho capito bene, il tuo codice costruisce la query inserendo i valori direttamente. Qualcosa tipo
Codice PHP:
$sql = "UPDATE tabella SET start_date = '{$start_date}', end_date = '{$end_date}' WHERE id = '{$id}'";
Questa è una cattiva idea, perché apre la porta a problemi di sicurezza e, come hai scoperto, non funziona con NULL. Se ad esempio $start_date contiene il valore null, ti ritrovi con questa query
Codice:
UPDATE tabella SET start_date = '', end_date = '2023-12-31' WHERE id = '1'
La versione corretta sarebbe
Codice:
UPDATE tabella SET start_date = NULL, end_date = '2023-12-31' WHERE id = '1'
Sarebbe meglio usare i prepared statement del PHP, che ti permettono di scrivere una query generica con degli spazi predefiniti, e lasciare alla libreria il compito di formattarli correttamente:
Codice PHP:
$sql = "UPDATE tabella SET start_date = ?, end_date = ? WHERE id = ?";
$query = $pdo->prepare($sql);
$result = $query->exec([ $start_date, $end_date, $id ]);