Postgresql: używanie wartości „NULL” podczas wstawiania i aktualizowania wierszy za pomocą przygotowanych instrukcji
czasami muszę wstawić do tabeli pewne wartości null lub zaktualizować je ustawiając wartość na NULL.
Czytałem gdzieś w dokumentacji postgresql, że nie można tego zrobić, ale może byćtricket z wartością domyślną:
<code>pg_query("INSERT INTO my_table (col_a, col_b) VALUES ('whatever', default) </code>
p.s: wiem, że w tym przykładzie będę miał taki sam wynik
<code>pg_query("INSERT INTO my_table (col_a) VALUES ('whatever') </code>
Ale problemy wynikają z przygotowanych oświadczeń:
<code>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. </code>
Ten sam problem pochodzi z zapytania o aktualizację.
Myślę, że istnieje rozwiązanie, ponieważ pgmyadmin może to zrobić (lub wydaje się, że może) i jest napisany w php (nie sądzę, żeby mimo wszystko korzystał z przygotowanych instrukcji)
Jeśli zastanawiasz się, dlaczego muszę paly z wartościami null w moich tabelach, pozwól mi rzucić przykład (być może jest lepszy sposób niż wartość null): załóżmy, że mam tabelę użytkownika i e-mail col: ten może być pusty , ale jest indeksem unikalnym. Są 2 puste wiadomości e-mailrówny i narusza unikalne ograniczenie, a 2ZERO wartości nie są równe i mogą współistnieć.