PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fügen Sie NULL über PHP in eine PostgreSQL-DB ein, wenn ein Datumsfeld leer ist

Ihr Problem ist, dass Sie einfache Anführungszeichen in Ihrem SQL haben:

INSERT INTO product (first_field, second_field, third_field, my_date) 
VALUES ('$data[0]', '$data[1]', '$data[2]', '$data[3]')

also wenn $data[0][code> ist die Zeichenfolge "NULL" , erhalten Sie Folgendes:

INSERT INTO product (first_field, second_field, third_field, my_date) 
VALUES ('NULL', ...

und Sie werden versuchen, eine Zeichenfolge einzufügen, die NULL anstelle des NULL-Literals selbst enthält. Sie müssen Ihre Anführungszeichen innerhalb der $data setzen Werte statt in Ihrem SQL:

# Warning: my PHP is a bit rusty but I think this is right
if(empty($data[0])) {
    $data[0] = "NULL";
}
else {
    $data[0] = "'" . pg_escape_string(utf8_encode($data[$c])) . "'";
}

Und dann später:

pg_query($_db, "INSERT INTO product (first_field, second_field, third_field, my_date) 
    VALUES ($data[0], $data[1], $data[2], $data[3])";

Oder besser, wechseln Sie zu PDO und verwenden Sie vorbereitete Anweisungen.