иногда мне нужно вставить в таблицу несколько нулевых значений или обновить их, установив значение в NULL.
Я где-то читал в документации postgresql, что это невозможно сделать, но может быть tricket со значением по умолчанию:
pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default)
ps: Я знаю, что в этом примере у меня будет тот же результат с
pg_query("INSERT INTO my_table (col_a) VALUES ('whatever')
Но проблемы возникают с подготовленными заявлениями:
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, default)"); pg_exec($pgconn, 'insert_null_val', array('whatever')); //this works, but pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)"); pg_exec($pgconn, 'insert_null_val', array('whatever', 'NULL')); //insert into the table the string 'NULL'. //instead using array('whatever', '') it assume the col_b as empty value, not NULL.
Такая же проблема возникает с запросом на обновление.
Я думаю, что есть решение, потому что pgmyadmin может это сделать (или похоже, что он может), и написано i php (я не думаю, что он не использует подготовленные заявления в любом случае)
Если вы задаетесь вопросом, почему мне нужно лавировать с нулевыми значениями в моих таблицах, позвольте мне привести пример (возможно, есть способ лучше, чем нулевое значение): предположим, что у меня есть таблица пользователя, а адрес электронной почты: этот может быть пустым , но является уникальным индексом. 2 пустое письмо равно и нарушает единственное ограничение, а 2 значения NULL не равны и могут сосуществовать.
В качестве параметра используйте литерал NULL
php
:
pg_prepare($pgconn, 'insert_null_val', "INSERT INTO my_table (col_a, col_b) VALUES ($1, $2)"); pg_exec($pgconn, 'insert_null_val', array('whatever', NULL));