PHP test db NULL value

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
Hi all,

Hoe test je in PHP als een waarde uit een database (mysql) een null bevat?

Op php.net word ik niet wijzer, hier op het got zag ik ook al enkele topics voorbij komen waarin geen duidelijk antwoord komt...

Het enigste duidelijke antwoord wat ik tot nog toe tegenkom is: zorg ervoor dat je geen null values uit je query komt... yeah sure ;)

Dit is de meest logische methode zou ik zelf zeggen maar werkt voor geen meter dus:

if(is_null($row['pending_total'])){
$pending_total = "0";
}else{
$pending_total = $row['pending_total'];
}

Ik heb geprobeerd:
== NULL
isnull()

Nou ja, of ik kijk er inmiddels bruut overheen of .... tsja ;) hahaha

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

doe gewoon eens een var_dump($row) en kijk wat je precies aan data krijgt...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • watercoolertje
  • Registratie: Januari 2008
  • Laatst online: 08:45

watercoolertje

Untertitel

miscshien 3x= voor de NULL dus === NULL?

(16 x 300Wp) 4800Wp + (sinds 14 feb 2023) (7 x 405Wp) 2835Wp = 7635Wp @Zuid op 4.5kW omvormer


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
crisp schreef op donderdag 20 maart 2008 @ 16:44:
doe gewoon eens een var_dump($row) en kijk wat je precies aan data krijgt...
Ik heb de query in phpmyadmin gedraaid en er zitten enkele null values in. Het vreemde is dat een niet-null niet word herkend, dat word dus steeds "0" ipv de waarde die in de recordset zit.

Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
watercoolertje schreef op donderdag 20 maart 2008 @ 16:46:
miscshien 3x= voor de NULL dus === NULL?
ga ik ff proberen...

//edit

if($row['pending_total'] === NULL){
$pending_total = "0";
}else{
$pending_total = $row['pending_total'];
}

in dit geval bevat $row['pending_total'] een waarde van 1 of 2 maar met deze if statement poept php dus steeds een "0" uit.....

[ Voor 43% gewijzigd door ocdaan op 20-03-2008 16:49 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
ocdaan schreef op donderdag 20 maart 2008 @ 16:42:
Het enigste duidelijke antwoord wat ik tot nog toe tegenkom is: zorg ervoor dat je geen null values uit je query komt... yeah sure ;)
COALESCE(`kolom`, 0) :Y)

Hoeft niet per se de beste oplossing te zijn, maar het is wel een handige mysql function om iig te kennen. :)

{signature}


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:26

crisp

Devver

Pixelated

ocdaan schreef op donderdag 20 maart 2008 @ 16:47:
[...]


Ik heb de query in phpmyadmin gedraaid en er zitten enkele null values in. Het vreemde is dat een niet-null niet word herkend, dat word dus steeds "0" ipv de waarde die in de recordset zit.
is_null zou gewoon moeten werken, ik vermoed dus dat waar jij denkt dat je query een NULL teruggeeft er toch iets anders wordt teruggegeven. Waarom je volledig zou vertrouwen op wat phpmyadmin zegt in plaats van die kleine moeite te doen om je probleem te debuggen en zaken uit te sluiten begrijp ik niet helemaal...

Het geeft je ook meteen een mooi overzicht van welke velden er daadwerkelijk in $row zitten, misschien staat daar wel helemaal geen 'pending_total' in...

[ Voor 11% gewijzigd door crisp op 20-03-2008 16:54 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
Voutloos schreef op donderdag 20 maart 2008 @ 16:50:
[...]
COALESCE(`kolom`, 0) :Y)

Hoeft niet per se de beste oplossing te zijn, maar het is wel een handige mysql function om iig te kennen. :)
huhm hahaha deze zie ik voor het eerst moet ik bekennen... wtf is dat? ;)

Acties:
  • 0 Henk 'm!

  • watercoolertje
  • Registratie: Januari 2008
  • Laatst online: 08:45

watercoolertje

Untertitel

Als welk datatype staat pending_total in de database?

(16 x 300Wp) 4800Wp + (sinds 14 feb 2023) (7 x 405Wp) 2835Wp = 7635Wp @Zuid op 4.5kW omvormer


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
crisp schreef op donderdag 20 maart 2008 @ 16:52:
[...]

is_null zou gewoon moeten werken, ik vermoed dus dat waar jij denkt dat je query een NULL teruggeeft er toch iets anders wordt teruggegeven. Waarom je volledig zou vertrouwen op wat phpmyadmin zegt in plaats van die kleine moeite te doen om je probleem te debuggen en zaken uit te sluiten begrijp ik niet helemaal...
hmm je gaat beetje te kort door de bocht ;) ik test deze php/queries in amfphp en output ook de sql dus ik ben 100% zeker dat het om die ene querie gaat. Maar ik begrijp wel wat je bedoelt en daar het je wel gelijk in natuurlijk.... (als je mij ook een beetje gelijk geeft) hahahah

//wat ik probeer te zeggen is dat in amf je niet zomaar een var_dump() kan doen.

[ Voor 5% gewijzigd door ocdaan op 20-03-2008 17:00 ]


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
watercoolertje schreef op donderdag 20 maart 2008 @ 16:52:
Als welk datatype staat pending_total in de database?
pending_total komt uit een sub-querie waarin een COUNT(id) gebeurt.... resultaat van de count dus

Acties:
  • 0 Henk 'm!

  • aaajeetee
  • Registratie: Augustus 2002
  • Laatst online: 20-09 16:31
ocdaan schreef op donderdag 20 maart 2008 @ 16:56:
[...]


pending_total komt uit een sub-querie waarin een COUNT(id) gebeurt.... resultaat van de count dus
Een count(*) levert toch altijd 0 of meer op?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
ocdaan schreef op donderdag 20 maart 2008 @ 16:52:
[...]
huhm hahaha deze zie ik voor het eerst moet ik bekennen... wtf is dat? ;)
Een handige functie welke zoals alle functies gewoon in de manual staat. :>
ocdaan schreef op donderdag 20 maart 2008 @ 16:55:
//wat ik probeer te zeggen is dat in amf je niet zomaar een var_dump() kan doen.
Er zijn altijd wel legio debug opties beschikbaar. Als het niet qua direct output kan, kan het ook indirect (file schrijven) etc. etc. Beetje inzet om handig met je platform/taal om te kunnen gaan mag wel.
ocdaan schreef op donderdag 20 maart 2008 @ 16:47:
Het vreemde is dat een niet-null niet word herkend, dat word dus steeds "0" ipv de waarde die in de recordset zit.
Mijn gok naar de oorzaak van je probleem: je hebt de kolomnaam verkeerd, dus is dat element in $row nooit gezet. Geef een alias voor dat kolom op. Count(wa) heeft bijvoorbeeld geen `wa` meer als kolomnaam.

[ Voor 24% gewijzigd door Voutloos op 20-03-2008 17:11 ]

{signature}


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
Voutloos schreef op donderdag 20 maart 2008 @ 17:08:
[...]
Een handige functie welke zoals alle functies gewoon in de manual staat. :>

[...]
Er zijn altijd wel legio debug opties beschikbaar. Als het niet qua direct output kan, kan het ook indirect (file schrijven) etc. etc. Beetje inzet om handig met je platform/taal om te kunnen gaan mag wel.
Ik begrijp je helemaal....

Wat ik heb gedaan, ik output 2 versies die ik in amf met een 1/0 aanroep. In de ene situatie output ik rechtstreeks wat er uit de db kom en in de andere situatie output ik de zooi zoals ik het eingelijk wil hebben... met de if statements dus... verder geeft phpmyadmin dezelfde output, dus ik ben heilig overtuigd dat ik precies weet wat de database output is.... enkel die f#@king check werkt niet goed, en zoals ik al op vele pagina's zie is dat ik niet de enigste ben die hier problemen mee heeft.

Maargoed, ik zal morgen ff die zooi eruit halen en in een gewone php pagina gooien, dan debug ik wel ff verder...

iig bedankt voor je input ;)

//edit op je edit ;) ja ik begrijp wat je zegt.. maar zie verhaaltje wat ik net heb getypt ;)
en voor de sub-query gebruik ik offcourse (SELECT * FROM iets) AS te_gebruiken_veld_naam

[ Voor 7% gewijzigd door ocdaan op 20-03-2008 17:15 ]


Acties:
  • 0 Henk 'm!

  • EdDeNtEr
  • Registratie: Januari 2007
  • Laatst online: 07-09 23:56
wat dacht je van een

if(isset($row['pending_total']))
$pending_total = $row['pending_total'];

dat zou de goede werking moeten hebben.

Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 03-09 14:20

ocdaan

Niet zo zeuren jongens!

Topicstarter
EdDeNtEr schreef op donderdag 20 maart 2008 @ 17:18:
wat dacht je van een

if(isset($row['pending_total']))
$pending_total = $row['pending_total'];

dat zou de goede werking moeten hebben.
Ja top! Dit lijkt precies te doen wat ik wilde ;) Thanx!

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
if( array_key_exists( 'pending_total', $row ) ){
  if( is_null( $row[ 'pending_total' ] ) ){
    echo 'MyVar is null'; // is daadwerkelijk null
    $row[ 'pending_total' ] = 0;
  }elseif( empty( $row[ 'pending_total' ] ) ){
    echo 'MyVar is not null but still empty'; // is geen null maar wel leeg
    $row[ 'pending_total' ] = 0; // forceer een integer (0)
  }else{
    echo 'MyVar is not empty';
  }
}else{
  throw new Exception( 'Key does not exist!' );
}
Pagina: 1