Korrektes und kompatibles Erkennen von NULL
Korrektes und kompatibles Erkennen von NULL
am 11.01.2006 17:48:12 von Bodo Kaelberer
Hi
Wie erkenne ich ob eine Spalte den Wert NULL hat? Bei MySQL scheint
man PHPs is_null()-Funktion verwenden zu können. Manche Datenbank-
Schnittstellen bieten spezielle Funktionen an, z.B.
pg_field_is_null().
Gibt es auch eine Möglichkeit, die mit jeder Datenbank funktioniert?
--
Re: Korrektes und kompatibles Erkennen von NULL
am 11.01.2006 17:57:25 von Frank Schenk
Hallo Bodo,
Bodo Kaelberer wrote:
> Wie erkenne ich ob eine Spalte den Wert NULL hat? Bei MySQL scheint
> man PHPs is_null()-Funktion verwenden zu können. Manche Datenbank-
> Schnittstellen bieten spezielle Funktionen an, z.B.
> pg_field_is_null().
>
> Gibt es auch eine Möglichkeit, die mit jeder Datenbank funktioniert?
ich verwende üblicherweise die Funktion, die das DBMS anbietet.
MySQL:
select a,b,c, d is null as zerocheck from ....
Postgres:
select a,b,c, d is null as zerocheck from ....
In PHP kannst du dann einfach zerocheck auf 0 (nicht NULL) oder 1 (NULL)
prüfen.
Gruß, Frank
Re: Korrektes und kompatibles Erkennen von NULL
am 11.01.2006 18:57:29 von Bodo Kaelberer
Hi Frank
Frank Schenk am Wed, 11 Jan 2006 17:57:25 +0100:
> Hallo Bodo,
>
> Bodo Kaelberer wrote:
> > Wie erkenne ich ob eine Spalte den Wert NULL hat? Bei MySQL scheint
> > man PHPs is_null()-Funktion verwenden zu können. Manche Datenbank-
> > Schnittstellen bieten spezielle Funktionen an, z.B.
> > pg_field_is_null().
> >
> > Gibt es auch eine Möglichkeit, die mit jeder Datenbank funktioniert?
>
> ich verwende üblicherweise die Funktion, die das DBMS anbietet.
>
> MySQL:
> select a,b,c, d is null as zerocheck from ....
> ...
> In PHP kannst du dann einfach zerocheck auf 0 (nicht NULL) oder 1 (NULL)
> prüfen.
Die Syntax sagt mir gar nichts. Wird da in der Datenbank eine
Überprüfung gemacht, ob d null ist und das Ergebnis finde ich in der
"Spalte" zerocheck als 0 oder 1?
--
Re: Korrektes und kompatibles Erkennen von NULL
am 11.01.2006 21:47:25 von Helmut Schmuckermair
>>>Wie erkenne ich ob eine Spalte den Wert NULL hat?
SELECT spalte1,spalte2 FROM tabelle1 WHERE spalte3 IS NULL
>>>Gibt es auch eine Möglichkeit, die mit jeder Datenbank funktioniert?
s.o.
>>select a,b,c, d is null as zerocheck from ....
> Die Syntax sagt mir gar nichts.
mir auch nicht
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 01:04:16 von Sevo Stille
Bodo Kaelberer wrote:
> Gibt es auch eine Möglichkeit, die mit jeder Datenbank funktioniert?
IS NULL. Problem ist dabei eher das Datenbankdesign bzw. das=20
Zusammenwirken von schlampigen Design (ausgelassenes DEFAULT NULL) mit=20
inkonsistenten Backends (z.B. Mysql, Postgresql < 8, alte Sybase), die=20
(typabhängig) nicht erzwingen, daß leere Werte immer NULL sind.
Gruß Sevo
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 11:32:21 von Bodo Kaelberer
Hi
Helmut Schmuckermair am Wed, 11 Jan 2006 21:47:25 +0100:
> >>>Wie erkenne ich ob eine Spalte den Wert NULL hat?
> SELECT spalte1,spalte2 FROM tabelle1 WHERE spalte3 IS NULL
Ich hatte mich ungenau ausgedrückt.
Im meinem Fall geht es um einen Export der Daten im Rahmen eines
SELECT * FROM ....
Dabei einzelne Werte per Statement auf NULL zu prüfen kommt natürlich
aus Performance-Gründen nicht in Frage.
--
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 12:05:35 von Frank Schenk
Hallo Bodo,
Bodo Kaelberer wrote:
> Hi Frank
>
>>ich verwende üblicherweise die Funktion, die das DBMS anbietet.
>>
>>MySQL:
>>select a,b,c, d is null as zerocheck from ....
>>...
>>In PHP kannst du dann einfach zerocheck auf 0 (nicht NULL) oder 1 (NULL)
>>prüfen.
>
>
> Die Syntax sagt mir gar nichts. Wird da in der Datenbank eine
> Überprüfung gemacht, ob d null ist und das Ergebnis finde ich in der
> "Spalte" zerocheck als 0 oder 1?
>
genau. Siehe Handbuch zu IS NULL bzw. einfach an der Console testen.
Wobei Postgresql true oder false zurückgibt
select NULL is null as zerocheck;
> 1
select '' is null as zerocheck;
> 0
select 0 is null as zerocheck;
> 0
select 'sdsd' is null as zerocheck;
> 0
Gruß, Frank
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 12:08:38 von Frank Schenk
Bodo Kaelberer wrote:
>
> Ich hatte mich ungenau ausgedrückt.
> Im meinem Fall geht es um einen Export der Daten im Rahmen eines
> SELECT * FROM ....
> Dabei einzelne Werte per Statement auf NULL zu prüfen kommt natürlich
> aus Performance-Gründen nicht in Frage.
ich wage mal zu behaupten, daß das DBMS die Aufgabe resourcenschonender
als PHP erledigen kann. Oder ging es drum, in der where clause auf NULL
zu prüfen?
Mit so wenig Informationen lässt sich schwerlich feststellen, worauf du
hinauswillst.
Gruß, Frank
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 13:11:15 von Axel Schwenke
Bodo Kaelberer wrote:
> Helmut Schmuckermair am Wed, 11 Jan 2006 21:47:25 +0100:
>
>> >>>Wie erkenne ich ob eine Spalte den Wert NULL hat?
>> SELECT spalte1,spalte2 FROM tabelle1 WHERE spalte3 IS NULL
>
> Ich hatte mich ungenau ausgedrückt.
> Im meinem Fall geht es um einen Export der Daten im Rahmen eines
> SELECT * FROM ....
> Dabei einzelne Werte per Statement auf NULL zu prüfen kommt natürlich
> aus Performance-Gründen nicht in Frage.
Siehste, kaum stellst du deine Frage richtig, schon kann dir geholfen
werden. Dein SQL-Statement bleibt einfach ein SELECT * FROM ...
ABER du mußt beim Auslesen der Ergebnisse darauf testen, ob ein
bestimmtes Feld NULL ist. Auch PHP kennt den speziellen Wert NULL.
Und hat eine Testfunktion is_null().
XL
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 14:03:11 von Bodo Kaelberer
Hi Axel
Axel Schwenke am Thu, 12 Jan 2006 13:11:15 +0100:
> Siehste, kaum stellst du deine Frage richtig, schon kann dir geholfen
> werden. Dein SQL-Statement bleibt einfach ein SELECT * FROM ...
> ABER du mußt beim Auslesen der Ergebnisse darauf testen, ob ein
> bestimmtes Feld NULL ist. Auch PHP kennt den speziellen Wert NULL.
> Und hat eine Testfunktion is_null().
Die hatte ich im Anfangsposting bereits erwähnt und mit MySQL
erfolgreich getestet. Ich weiss aber nicht, wie kompatibel das ist, da
z.B. für Oracle eine spezielle PHP-Funktion existiert, um einen Wert
auf NULL zu prüfen. Das legt nahe, dass es nicht immer mit dem
internen PHP-Wert von null übereinstimmt.
Wobei mir eine Lösung für MySQL im Moment und vielleicht auch für
immer genügt. Ich dachte nur, dass wo ich gerade dabei bin, es
vielleicht auch eine allgemeine Möglichkeit gibt.
--
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 14:06:17 von Bodo Kaelberer
Hi
Frank Schenk am Thu, 12 Jan 2006 12:08:38 +0100:
> > Dabei einzelne Werte per Statement auf NULL zu prüfen kommt natürlich
> > aus Performance-Gründen nicht in Frage.
>
> ich wage mal zu behaupten, daß das DBMS die Aufgabe resourcenschonender
> als PHP erledigen kann. Oder ging es drum, in der where clause auf NULL
> zu prüfen?
Es geht darum beim Export unterscheiden zu können, ob ein Feld einen
nummerischen Wert 0 hat, eine leere Zeichenkette oder den Wert NULL
wie er in der Datenbank verwendet wird. Sonst importiere ich nacher
ein NULL als 0 oder ''.
--
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 14:10:38 von Bodo Kaelberer
Hi
Frank Schenk am Thu, 12 Jan 2006 12:08:38 +0100:
> ich wage mal zu behaupten, daß das DBMS die Aufgabe resourcenschonender
> als PHP erledigen kann.
Gibt es seitens des DBMS (primär mysql) Möglichkeiten einen Export
durchzuführen, ohne an der Console arbeiten zu müssen?
--
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 15:50:09 von Axel Schwenke
Bodo Kaelberer wrote:
> Hi Axel
>
> Axel Schwenke am Thu, 12 Jan 2006 13:11:15 +0100:
>
>
>> Siehste, kaum stellst du deine Frage richtig, schon kann dir geholfen
>> werden. Dein SQL-Statement bleibt einfach ein SELECT * FROM ...
>> ABER du mußt beim Auslesen der Ergebnisse darauf testen, ob ein
>> bestimmtes Feld NULL ist. Auch PHP kennt den speziellen Wert NULL.
>> Und hat eine Testfunktion is_null().
>
> Die hatte ich im Anfangsposting bereits erwähnt und mit MySQL
> erfolgreich getestet.
Mein Fehler. Ich habe nicht soweit zurückgelesen.
> Ich weiss aber nicht, wie kompatibel das ist, da
> z.B. für Oracle eine spezielle PHP-Funktion existiert, um einen Wert
> auf NULL zu prüfen. Das legt nahe, dass es nicht immer mit dem
> internen PHP-Wert von null übereinstimmt.
Das ist durchaus möglich und eine der Sachen, die mich an PHP stört:
jede Extension kommt aus einem anderen Stall und verwendet andere
Vorgehensweisen (OO vs. prozedural, PHP-NULL vs. eigenes NULL,
Defaultparameter oder nicht, CamelCoding oder Namen_mit_underscore).
Ein einheitlicher Stil ist irgendwie nicht da.
Aber wenn die OCI-Extension kein PHP-NULL für NULLs aus der Datenbank
liefert, dann ist sie IMNSHO kaputt. OK, ein Kollege der mal das
zweifelhafte Vergnügen hatte, eine PHP-Applikation ontop Oracle zu
programmieren, sagt das auch :-/
> Ich dachte nur, dass wo ich gerade dabei bin, es
> vielleicht auch eine allgemeine Möglichkeit gibt.
Das Konzept "NULL" setzen alle Datenbanken gleich um. Nachdem PHP das
seit 4.0.irgendwas nun auch kann, würde ich erwarten, daß alle
Datenbank-API-Extensions das auch so umsetzen.
XL
Re: Korrektes und kompatibles Erkennen von NULL
am 12.01.2006 16:40:19 von Andreas Froede
Axel Schwenke wrote:
> Das Konzept "NULL" setzen alle Datenbanken gleich um.
Wie kommst Du auf dieses schmale Brett?
In kaum einen Bereich wird mehr Schwachsinn implementiert.
In Orakel gilt z.B. "" = NULL. MSSQL hat NULL = NULL ...
CIAO
andreas
--
Klettern in Thüringen: http://www.climb.spider-net.de
Kletterhalle in Jena: http://www.wand.spider-net.de