[php] mysql_fetch_array probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:13
ik heb de voglende code met wat geblaat (0 tot 4) om te testen
PHP:
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
unset($result);
$result=mysql_query("select id, voornaam ".
     "from smoelenboek ".
     "where voornaam LIKE '%voornaam%' ");
     if (empty($result)){
     echo ("Er is niemand met een voornaam die er op lijkt");
     echo ("blaat-1")
     }
     else {
       if (mysql_num_rows($result) == 0)
       {
       echo "Geen rijen gevonden, niets te printen, dus stoppen.";
       exit;
       }

     echo ("blaat0");
     while ($row = mysql_fetch_array($result)) {
echo ("blaat1");
$id = $row["id"];
$voornaamarray[] = $id;
echo ("blaat2");
//  einde database
}
echo ("blaat3");
// einde als result niet leef is
}

Ik krijg; de geen rijen gevonden echo. Ik snap dit niet, ik weet zeker dat de zoekopdracht die ik uitvoer wel een rij heeft in de tabel die er bij hoort. En dan nog, hoe kan $result niet leeg zijn (dat lees ik als er is iets gevonden conform je zoekopdracht) maar dat daar geen rij bij hoort.... (als ik $ result echo krijg ik
Resource id #6
waarbij die 6 soms een ander nummer is)

[ Voor 8% gewijzigd door pietje63 op 24-06-2003 17:37 ]

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Dit is in ieder geval al erg overbodig:
if (empty($result)){
echo ("Er is niemand met een voornaam die er op lijkt");
echo ("blaat-1")
}
else {
if (mysql_num_rows($result) == 0)
{
echo "Geen rijen gevonden, niets te printen, dus stoppen.";
exit;
}
Als je geen records terugkrijgt heb je geen records in de set :)

dus je kunt makkelijk checken met:

PHP:
1
2
3
4
5
6
7
if (mysql_num_rows($result)) {
   while ($row = mysql_fetch_assoc ($result)) {
        // doe wat met $row
   }
} else {
   echo "Geen resultaten gevonden.";
}


$result is een resultset en geeft bij printen inderdaad zoiets weer.

[ Voor 10% gewijzigd door Bosmonster op 24-06-2003 17:44 ]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:13
Bosmonster schreef op 24 June 2003 @ 17:39:
Dit is in ieder geval al erg overbodig:

[..]
Ja, maar daar verbaas ik me toch over... hij is niet leeg, maar heeft ook geen rijen..

op www.php.net(http://nl3.php.net/manual/nl/function.mysql-fetch-assoc.php) staat ook dit

PHP:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
    
    $conn = mysql_connect("localhost", "mysql_user", "mysql_password");
    
    if (!$conn) {
        echo "Kan geen verbinding maken met de DB: " . mysql_error();
        exit;
    }
    
    if (!mysql_select_db("mydbname")) {
        echo "Kan mydbname niet selecteren: "
    }
    
    $sql = "SELECT id as userid, fullname, userstatus 
            FROM   sometable
            WHERE  userstatus = 1";

    $result = mysql_query($sql);

    if (!$result) {
        echo "Kon de query ($sql) niet uitvoeren: " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($result) == 0) {
        echo "Geen rijen gevonden, niets te printen, dus stoppen.";
        exit;
    }

    // Terwijl er nog een rij met data is, stop die rij in $row als een
    // associatieve array. Als je slechts een rij terug verwacht, hoef je
    // geen loop te gebruiken. Als je extract($row); binnen de volgende
    // loop plaatst, ontstaan $userid, $fullname en $userstatus.
    while ($row = mysql_fetch_assoc($result)) {
        echo $row["userid"];
        echo $row["fullname"];
        echo $row["userstatus"];
    }
        
    mysql_free_result($result);
?>


en overbodig, ik ben nu gewoon extra stappen aan het invoeren omdat het script niet werkt..

nog even kort; $result is niet leeg maar heeft ook geen rijen

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Klopt.. $result is een RESULTSET... dit is dus nooit leeg :) De resultset kan wel geen rijen bevatten, maar het blijft een resultset.

Als je wilt checken of je resultset 'leeg' is gebruik je dus mysql_num_rows().

Dit:

mysql_free_result($result);

Hoe je trouwens niet per se te doen, aangezien PHP dit zelf doet als je script is afgelopen ;) Is alleen handig als je tussentijds grote resultsets wilt legen.
Als je slechts een rij terug verwacht, hoef je
// geen loop te gebruiken. Als je extract($row); binnen de volgende
// loop plaatst, ontstaan $userid, $fullname en $userstatus.
Als je maar 1 rij terugverwacht, kun je beter met mysql_result($result, 0, 'kolomnaam') werken (tenzij het een rij is met 50 kolommen ofzo en je ze allemaal wilt hebben ;))

[ Voor 65% gewijzigd door Bosmonster op 24-06-2003 17:49 ]


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

PHP:
1
"where voornaam LIKE '%voornaam%' "


moet voornaam niet toevallig $voornaam zijn? Of is iemands voornaam 'voornaam'? :)

en nee, ik houd niet van voetbal... :)