Avatar billede dank Nybegynder
28. februar 2004 - 18:23 Der er 9 kommentarer

simpel while løkke (mysql_fetch_object) med OO kode

Jeg har:

while ($con -> query("select * from users")) {
print_r ($object);

i class har jeg:

function query($mQuery)
        {
        $result = mysql_query($mQuery, $this->link);
        $object = mysql_fetch_object($result);
//      print_r ($object);
        return object;
        }

JEg har 2 problemer.

1: Den kører i (forkert) løkke.. Det ser ud til at den altid kun selecter første række

2: Jeg kan ikke udskrive print_r($object) som er tom? Men hvis jeg udskriver den fra klassen, så virker det fint.

Nogen der kan hjælpe mig lidt videre med lidt hints?
Avatar billede markh Nybegynder
28. februar 2004 - 18:57 #1
Jeg formoder $con er dit instance af klassen.

Class:

function

function query($mQuery) {
      $result = mysql_query($mQuery);
}

function getnextRow() {
      $record = mysql_fetch_object($result);

      // Bliver der returneret et array?
      $stat = is_array($record);
      return $stat;
}

function printRow() {
      print_r($record);
}

I dit script:

$con->query("select * from users");
while ($con->getnextRow()) {
          $con->printRow();
}
Avatar billede markh Nybegynder
28. februar 2004 - 19:00 #2
Din fejl er for øvrigt at du prøver at iterere over din funktion, hvor du laver din select-statement - hver gang du gør det, nulstiller du jo tælleren, og derfor får du kun det første resultat.
Avatar billede markh Nybegynder
28. februar 2004 - 19:03 #3
...og jeg sover. :)

$stat = is_array($record);

skal naturligvis være:

$stat = is_object($record);

da mysql_fetch_object() returnerer et object, og ikke et array...
Avatar billede dank Nybegynder
28. februar 2004 - 19:10 #4
Det lyder fornuftigt.. dog får jeg

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/oo/test.php on line 41

Kigger lige lidt på det.
Avatar billede dank Nybegynder
28. februar 2004 - 19:50 #5
nu virker det næsten... dog virker $con->printRow(); dog ikke.. jeg kan kun få output ved at gøre således:

$con -> query("$strSQL");
while (
        $con->getnextRow()) {
        $con->printRow();
}



function query($mQuery)
        {
        $this -> $result = mysql_query($mQuery, $this->link);
        }

        function getnextRow() {
        $record = mysql_fetch_object($this -> $result);

print_r($record);


// Bliver der returneret et object?

        $stat = is_object($record);
        return $stat;
        }

        function printRow() {
        print_r($record);
        }
}

Nogen der kan hjælpe? og markh opretter du svar?
Avatar billede markh Nybegynder
28. februar 2004 - 20:29 #6
Hej Dank,

Nedenstående virker med sikkerhed - du er velkommen til at bruge det, hvis du har lyst - jeg har selv brugt det en hel del gange, men har aldrig givet at gøre det helt færdigt (det virker jo!):

class fooClass {

        # Initialize a bunch of variables

        var $Error;
        var $Errno;

        var $Host;
        var $User;
        var $Password;
        var $Database;

        var $link_id;
        var $query_id;
        var $Record;
        var $Row;

        function dbConnect() {
                $this->Host = ""; # Hostnavn
                $this->User = ""; # Brugernavn
                $this->Password = ""; # Password
                $this->Database = ""; # Database

                if ($this->link_id == 0) {
                        $this->link_id = mysql_connect($this->Host, $this->User, $this->Password);
                        if (! $this->link_id) {
                                $this->halt("Link-ID == false - forbindelsen til databasen mislykkedes");
                        }
                }
                if (!mysql_query(sprintf("use %s", $this->Database), $this->link_id)) {
                        $this->halt("Databasen '$this->Database' eksisterer ikke!");
                }
        }

        function dbQuery($query) {
                if ($this->link_id == 0) {
                        $this->dbConnect();
                }

                $this->query_id = mysql_query($query, $this->link_id);
        }

        function numRows() {
                return mysql_num_rows($this->query_id);
        }

        function returnRow() {
                $this->Record = mysql_fetch_assoc($this->query_id);
                $this->Row += 1;
                $this->Errno = mysql_errno();
                $this->Error = mysql_error();

                $stat = is_array($this->Record);
                return $stat;
        }

        function f($Name) {
                return $this->Record[$Name];
        }

        function halt($msg) {
                print "$msg\n";
                exit;
        }
}

Mht. svar/point, behøver du ikke give mig noget; jeg går ikke efter point herinde. Bruger det til at holde mine egne evner i live, så de ikke ruster (alt for meget). :)
Avatar billede markh Nybegynder
28. februar 2004 - 20:33 #7
Kort forklaring:

Hvis du kalder funktionen dbQuery(), vil den automatisk oprette forbindelsen til databasen.

Derefter kan du iterere over returnRow(), og printe med funktionen f() á lá:

while ($con->returnRow()) {
      print $con->f("KOLONNE"); # KOLONNE er navnene på dine rows i den pågældende tabel i DB'en
}
Avatar billede dank Nybegynder
28. februar 2004 - 21:26 #8
ok jeg prøver det. opretter du et svar, og tak i alle tilfælde for din hjælp
Avatar billede dank Nybegynder
25. april 2004 - 23:56 #9
ups.. har vist et par ikke lukkede spørgsmål som jeg hellere må rydde op i.

svarer du?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester