[PHP/SQL] mysql_numrows -> fout afhandelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Ik heb op dit moment deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function zoekAlleUitkeringen()
{
    $zoekquery = mysql_query("  SELECT 
                                    DISTINCT(u.gsm_nr),a.debiteur_nr,a.debiteur_naam,a.abonvorm_naam
                                FROM 
                                    uitkering u, abonnementen a
                                WHERE 
                                    u.abonnement_id = ''
                                AND u.gsm_nr = a.gsm_nr"); 

    if(mysql_numrows($zoekquery))
    {
        $aReturn = array();
        while($aResult = mysql_fetch_assoc($zoekquery))
            array_push($aReturn, $aResult);
    
        return $aReturn;
    }
    else 
        return false;
}

maar het kan zo zijn dat de query geen resultaten krijgt en dat mag ook want deze functie is voor het genereren van een overzicht en als er geen resultaten zijn dan hoeft er geen overzicht te komen :)
dit werkt allemaal maar als je dan geen resultaten hebt dan krijg je deze melding:
PHP Warning: mysql_numrows(): supplied argument is not a valid bla bla bla....
Jah snap ik maar ik wil die error niet krijgen :P
hij komt in die if zodra er minimaal 1 result is en lijkt me dat ik het zo toch wel redelijk had opgelost

als ik er dit van maak:
PHP:
1
if(!empty($zoekquery))

werkt het wel en zonder foutmelding in de log ^^

maar nu wil ik dus weten of het dan uitmaakt wat ik gebruik?
en of mijn eerste manier fout is?

edit: het schiet me net te binnen :) ->
PHP:
1
if(@mysql_numrows($zoekquery))

zo werkt het dus ook :)
Maar is dit geen manier wat technisch gezien minder professioneel is??
want heb ooit keer opgevangen dat dit wel de makkelijke weg is om fouten te omzeilen of is dit gewoon goed?

hoofdreden is dat er geen of zeer weinig wordt weggeschreven in de log files :)

[ Voor 11% gewijzigd door Tijgertje84 op 03-08-2006 09:40 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

tis ook geen error he, maar een warning.
Wat betekent dat je code wel werkt, maar niet helemaal correct is.

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Tsjilp schreef op donderdag 03 augustus 2006 @ 09:39:
tis ook geen error he, maar een warning.
Wat betekent dat je code wel werkt, maar niet helemaal correct is.
wil dus ook geen warnings hebben en deze gewoon netjes wil proberen op te lossen door het script goed te maken :)

dus de vraag is of de (@) de beste oplossing hier is?

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als een mysql_* functie een error opgooit omdat je geen valid resource hebt, dan is de resultset niet leeg maar klopt je query niet. Een lege resultset is ook gewoon valid. Debug je query maar eens.

@ is nooit een oplossing, eerder symptoombestrijding.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MrNGm
  • Registratie: Augustus 2004
  • Laatst online: 01-09 13:45
Het is toch mysql_num_rows?
edit:
Uit de PHP manual: Note: For downward compatibility, the following deprecated alias may be used: mysql_numrows()


Bovendien is die if-constructie niet helemaal lekker. Mysql_num_rows geeft niet standaard TRUE terug, waarom test je dan op TRUE en FALSE. Doe iets van
PHP:
1
2
3
4
5
if (mysql_num_rows($zoekquery) > 0) {
  // al die resultaten ophalen
} else {
  // geen resultaten
}


Ik moet eigenlijk nog uitzoeken of mysql_num_rows 0 kan returnen. Als dat zo is, zou ik in de else nog een if zetten die test op of mysql_num_rows 0 is of FALSE, in het geval van FALSE, return mysql_error, en anders zeggen dat er geen resultaten zijn gevonden.

Acties:
  • 0 Henk 'm!

  • sQuarecoW
  • Registratie: Juli 2003
  • Laatst online: 12-09 16:01
mysql_num_rows kan idd 0 returnen, als er 0 rijen gevonden zijn.

Maar daarvoor moet je query wel correct zijn, en gezien de waarschuwing is ie dat niet. En dat kan dan dus liggen aan het niet bestaan van tabellen/velden die je opvraagt.

Acties:
  • 0 Henk 'm!

  • MrNGm
  • Registratie: Augustus 2004
  • Laatst online: 01-09 13:45
Dan is het een kwestie van mysql_error() toevoegen in de else clausule en klaar is kees. Zoals -NMe- al zei, even debuggen.

Acties:
  • 0 Henk 'm!

Verwijderd

en dit dan?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

function zoekAlleUitkeringen()
{
    $sql="SELECT  DISTINCT(u.gsm_nr),a.debiteur_nr,a.debiteur_naam,a.abonvorm_naam
                                FROM 
                                    uitkering u, abonnementen a
                                WHERE 
                                    u.abonnement_id = ''
                                AND u.gsm_nr = a.gsm_nr";
                                
                                
    if($zoekquery = mysql_query($sql))
    {
        if(mysql_num_rows($zoekquery)>0)
        {
            $aReturn = array();
            while($aResult = mysql_fetch_assoc($zoekquery))
                array_push($aReturn, $aResult);
        
            return $aReturn;
        }
    }
    
    return false;
    
}
?>
Pagina: 1