Mam maly klopot z konstrukcja prostego INSERTA w Postgress - zwykle dzialam w LAMP lecz na potrzeby jednego projektu musialem sie przesiasc na LAPP i wyszla moja nieznajomosc pewnych niuansow PG. W czym rzecz:
Upraszczajac problem do meritum - pobieram z formularza (POST) wartosc pola i zwyklym insertem wpisuje go do bazy. Pole to jednak w pewnych sytuacjach moze byc puste i wtedy mam problem. Przy standardowym zapytaniu wzorem z MYSQL do bazy wpisuja sie dwa apostrofy (i dziala ok jezli zmienna przechowuje dane).
.....
$pg_pole = pg_escape_string($_POST['pole']);
.....
$q = "INSERT INTO tab (pole) VALUES ('$pg_pole')";
$ref = pg_query($conlink,$q);
....
Poczytalem dokumentacje i trafilem na funkcje NULLIF : po zmianie kodu :
$q = "INSERT INTO tab (pole) VALUES (NULLIF($pg_pole,''))";
wszystko jest cacy - z wyjatkiem czasu wykonania operacji. Oczywiscie gorny przyklad to wyrywek zapytania, we wlasciwym uzywam NULLIF kilkadziesiat razy. To powoduje ze czas wykonania operacji niepokojaco rosnie - z kilku milisekund do kilkudziesieciu. Uzycie preparowanych zapytan poprawia sytuacje ale niewiele.
I wreszcie wlasciwie pytanie po tym przydlugim wstepie ktory mi mam nadzieje wybaczycie:
Czy mozliwe jest jakos globalne uzycie NULLIF dla szeregu danych a nie dla kazdej z osobna? Jakas dyrektywa or cos?
A moze jest inny sposob na wymuszenie wstawiania NULL do bazy gdy zmienna jest pusta? (oczywiscie zwykle $dane = NULL; nie dziala - a gdyby nawet to czas bylby jeszcze dluzszy :))
ps. Swoja droga na MYSQL mowia - zwykly worek z danymi, ale takich problemow to on nie sprawial mi nigdy :)
upik. Problem nadal aktualny :) Na innych formnach sa bezradni, tu w sumie to tylko z przyzwyczajenia napisalem, ale jak to mowia - a nuz widelec sie uda.
poltar --> na Postgresie sie nie znam, wiec sama nie podpowiem, ale probowales zadac pytanie na stackoverflow? Tam zawsze jest duza szansa, ze ktos pomoze.