Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Empty string to NULL
michas61
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.09.2005

Ostrzeżenie: (0%)
-----


Witam

Czy ktoś z Was korzystał z PDO do podłączenia do PostreSQL?
Sytuacja komplikuje się w momencie gdy robię inserta z wartościami null, standardowo inne bazy interpretują pusty string '' jako null.
W PDO jest parametr PDO::NULL_EMPTY_STRING oraz PDO::NULL_TO_STRING, ale nie przynosi to żadnego rezultatu.

Czy ktoś ma jakiś pomyśł?
Go to the top of the page
+Quote Post
Łukasz O.
post
Post #2





Grupa: Zarejestrowani
Postów: 191
Pomógł: 5
Dołączył: 13.01.2007

Ostrzeżenie: (0%)
-----


w funkcji quotującej PDO następuje type casting wartości NULL na string'a

żeby to obejść powinieneś sprawdzać czy wartość czasem nie jest NULL'em i pisać:
  1. <?php
  2. $pdo->query('INSERT INTO tabela(tresc) VALUES('.(is_null($zmienna) ? NULL : $pdo->quote($zmienna)).')');
  3. ?>


albo napisz swoją funkcję quotującą i jej używaj zamiast $pdo->quote()
  1. <?php
  2. function DBNull($value = null){
  3. if(is_null($value)) return $value;
  4. if(is_bool($value)) return (bool)$value;
  5. if(is_int($value)) return (int)$value;
  6. if(is_float($value)) return (float)$value;
  7. return (string) $value = (trim($value));
  8. }
  9.  
  10. DBNull(null), # null
  11. DBNull('null'), # string 'null' (length=4)
  12. DBNull(0), #int 0
  13. DBNull(), # null
  14. DBNull(''), # string '' (length=0)
  15. DBNull(true) # boolean true
  16. );
  17. ?>


--------------------
"Don't tell me you want a bridge - show me the canyon you want to cross" Giuseppe Delena
Go to the top of the page
+Quote Post
michas61
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.09.2005

Ostrzeżenie: (0%)
-----


No sprawdzanie czy postawiana zmienna jest null było moją pierwsza myślą i rzeczywiście jest to może jakieś rozwiązanie. Ja natomiast szukam jakiegoś przełącznika, który interpretował by '' jako NULL, a wszystko po to aby nie wykonywać właśnie zbędnych warunków if
Go to the top of the page
+Quote Post
Łukasz O.
post
Post #4





Grupa: Zarejestrowani
Postów: 191
Pomógł: 5
Dołączył: 13.01.2007

Ostrzeżenie: (0%)
-----


nie ma takiego przełącznika - musisz sobie sam to zrobić tongue.gif
  1. <?php
  2. function DBNull($value = null){
  3.  
  4. if(is_null($value) || $value=='') return (null)$value;
  5.  
  6. if(is_bool($value)) return (bool)$value;
  7. if(is_int($value)) return (int)$value;
  8. if(is_float($value)) return (float)$value;
  9. return (string) $value = (trim($value));
  10. }
  11. ?>


--------------------
"Don't tell me you want a bridge - show me the canyon you want to cross" Giuseppe Delena
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@łukasz troche przesadziles z tymi rzutowaniami. Po co int rzutujesz na int? po co bool rzutujesz na bool? itd.
  1. <?php
  2. function DBNull($value = null){
  3.  
  4. if(is_null($value) || $value==='') return null;
  5. return $value;
  6. }
  7. ?>

Dodatkowo poprawilem twoj warunek =='' na ===''

@michas61 ja osobiscie wole nie polegac na takich automatach o ktore sie pytasz. Nie zawsze pusty string ma byc wkladany jako null. Raz ci potrzeba nulla, raz pustego stringa. Lepiej samemu okreslic co akurat wlasnie chcemy wlozyc.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:58