Postgresql: использование значения NULL при вставке и обновлении строк с помощью подготовленных операторов
Иногда мне нужно вставить в таблицу некоторые нулевые значения или обновить их, установив значение NULL.
Я где-то читал в документации postgresql, что это не может быть сделано, но может быть обманом со значением по умолчанию:
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.
Та же проблема возникает с запросом на обновление.
Я думаю, что есть решение, becose pgmyadmin может сделать это (или кажется, что может), и написано в php (я не думаю, что он все равно использует подготовленные утверждения)
Если вы задаетесь вопросом, почему мне нужно использовать pale с нулевыми значениями в моих таблицах, позвольте мне привести пример (может быть, есть способ лучше, чем нулевое значение): предположим, у меня есть таблица пользователя и столбец электронной почты: этот может быть пустым, но является уникальным индексом. 2 пустых письма равны и нарушают ограничение уникальности, в то время как 2 значения NULL не равны и могут сосуществовать.
1 ответ
Использовать php
буквально NULL
в качестве параметра:
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));