[PHP] MySQL class retourneert maar enkele row

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een MySQL database class gemaakt, en daar ondervind ik momenteel problemen mee als het gaat om een stukje code als dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$mysql = new mysql();
$mysql->connect();

$mysql->query("SELECT dit FROM dat");

while($dat= $mysql->fetch())
{
    $mysql->query("SELECT dittes FROM dattes WHERE wat='$dat->dit'");

    while($iets = $mysql->fetch())
    {
        echo $iets->dittes;
    }
}


Ik denk (omdat ik er maar niet uit kom met het debuggen) dat het te maken heeft dat ik één algemene variabele in de class heb waarin de laatst gebruikte query instaat en die telkens opnieuw gebruik. Maar ik zou niet weten hoe ik dit dan moet oplossen :?

Ik hoop dat iemand er wel de ervaring mee heeft, dit is in ieder geval mijn class tot nu toe:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
class mysql
{
    var $clock = 0;
    var $report = TRUE;
    var $query;
    var $history = array();

    function connect()
    {
        mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
        mysql_select_db(MYSQL_DB);
    }

    function query($sql)
    {
        timer::start();
        $this->query = @mysql_query($sql)or die($this->error($sql, mysql_error(), mysql_errno()));
        timer::stop();

        $this->clock+= timer::output();
        $this->history[] = $sql;
    }

    function fetch()
    {
        switch(MYSQL_FETCH)
        {
            case "MYSQL_OBJECT":
                return mysql_fetch_object($this->query);
                break;
            case "MYSQL_ASSOC":
                return mysql_fetch_array($this->query, MYSQL_ASSOC);
                break;
            case "MYSQL_NUM":
                return mysql_fetch_array($this->query, MYSQL_NUM);
                break;
            case "MYSQL_BOTH":
                return mysql_fetch_array($this->query, MYSQL_BOTH);
                break;
            case "":
                return mysql_fetch_object($this->query);
                break;
        }
    }

    function resultNum()
    {
        return mysql_num_rows($this->query);
    }

    function result($row, $field)
    {
        return mysql_result($this->query, $row, $field);
    }

    function error($sql, $error, $errno)
    {
        $array = debug_backtrace();

        $i = count($array) > "1" ? "1" : "0";

        $error = array("file"  => $array[$i]["file"],
                      "line"  => $array[$i]["line"],
                       "sql"   => $sql,
                       "error" => $error,
                       "errno" => $errno);

        if(isSet($this->report))
        {
            print("<pre>");
            print_r($error);
            print("</pre>");
        }
    }

    function close()
    {
        return mysql_close();
    }

    function execTime()
    {
        return str_replace('.', ',', substr(timer::output(), 0, 7));
    }

    function queryNum()
    {
        return count($this->history);
    }
}

[ Voor 17% gewijzigd door Verwijderd op 17-11-2003 21:31 . Reden: Typo ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Verwijderd schreef op 17 november 2003 @ 21:11:
(omdat ik er maar niet uit kom met het debuggen)
Dus.... wat heb je tijdens het debuggen wel gevonden en geconstateerd voordat wij dadelijk jouw werk driedubbelop gaan doen?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Natuurlijk, de fetch hoort technisch gezien niet bij je mysql klasse, die representeert alleen de connectie met je mysql db.

Je moet je query een instantie van een bepaalde klasse laten retourneren dat een resultset voorstelt. Daar zou je je fetches op moeten doen.

Oh, en nog iets, gebruik voor die cases gewoon defines, en dan als waarde ints, geen strings

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op 17 november 2003 @ 21:16:
Je moet je query een instantie van een bepaalde klasse laten retourneren dat een resultset voorstelt. Daar zou je je fetches op moeten doen.
Dus, als ik je goed begrijp, zit er dus niets anders op dan zoiets er van te maken (zie onder)?


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$mysql = new mysql();
$mysql->connect();

$other = new mysql();
$other->connect();

$mysql->query("SELECT dit FROM dat");

while($dat= $mysql->fetch())
{
    $other->query("SELECT dittes FROM dattes WHERE wat='$dat->dit'");

    while($iets = $other->fetch())
    {
        echo $iets->dittes;
    }
}


Bvd