webForumDet fria alternativet

Klasstrul

6 svar · 275 visningar · startad av aasah

aasahMedlem sedan mars 20033 451 inlägg
#1

Kan man inte returnera ett resultathandtag från en databasförfrågan från en klass??? Varför inte? :q

spangoMedlem sedan juni 20006 147 inlägg
#2

Re: Klasstrul

Jo, det kan man. Gör om, gör rätt... ;)

aasahMedlem sedan mars 20033 451 inlägg
#3

OK... Vad är det jag inte ser.... Utskrift från klassen går jättefint, utskrift av det returnerade handtaget funkar inte alls! PHP är i version 4.x

körning skrev:

Loaded.DB: 1!db: 0 => Anna
db: 1 => -
db: 2 => a
db: 3 => 0000-00-00
db: 4 => 1
db: 5 => 0
db: 6 => -
db: 7 => 1
Hmmmm

DB: 1!db: 0 => Anna
db: 1 => -
db: 2 => a
db: 3 => 0000-00-00
db: 4 => 1
db: 5 => 0
db: 6 => -
db: 7 => 1

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/aasah/.../QPsecFuncs.php on line 183
After

//Min klass - full av felsökningsfunktioner 
<?php

class DBConnMySQL {

   var $db = "";
   var $res = "";
   
   function DBConnMySQL() {
      mysql_connect(...);
      $this->db = mysql_select_db(...); //Numera (efter spangos svar nedan)
      //$this->res = array("res" => "", "no" => -1);
   }
   
   function getUsers() {
      $sql = "SELECT * FROM User";
      $res["res"] = mysql_query($sql) or die("DB");
      $res["no"] = mysql_num_rows($res["res"]);
     return $this->res;
   }
   
   function printUsers() {
      $sql = "SELECT * FROM User";
      $res["res"] = mysql_query($sql) or die("DB");
      $res["no"] = mysql_num_rows($res["res"]);
      echo "DB: ".$res["no"]."!";
         while ($row = mysql_fetch_array($res["res"],MYSQL_NUM))
            foreach ($row as $ix => $val)
               echo "db: $ix => $val<BR> ";
   }

   function getU() {
      $sql = "SELECT * FROM User";
      $res = mysql_query($sql) or die("DB");
      $no = mysql_num_rows($res);
      return $this->res;
   }

   function printU() {
      $sql = "SELECT * FROM User";
      $res = mysql_query($sql) or die("DB");
      $no = mysql_num_rows($res);
      echo "DB: $no!";
         while ($row = mysql_fetch_array($res,MYSQL_NUM))
            foreach ($row as $ix => $val)
               echo "db: $ix => $val<BR> ";
   }

}

//anrop och annat kul - i annan fil
echo "Loaded.";
include_once($path."QPdbClass.php");
$db = new DBConnMySQL();
$db->printUsers();
$resArr = $db->getUsers();
if ($resArr["no"] > 0) {
   while ($row = mysql_fetch_array($resArr["res"]))
      foreach ($row as $ix => $val)
         echo "$ix => $val, ";
}
else echo "Hmmmm <BR><BR>";
$db->printU();
$res = $db->getU();
while ($row = mysql_fetch_array($res))
   foreach ($row as $ix => $val)
      echo "$ix => $val, ";
echo "After <BR><BR>";

?>
spangoMedlem sedan juni 20006 147 inlägg
#4

Du glömmer bort "this" i konstruktorn. Så här ska det vara:

   function DBConnMySQL() {

      mysql_connect(...);

      [b]$this->db[/b] = mysql_select_db(...);

   }

$db är en lokal variabel i konstruktorn, medan $this->db är en medlemsvariabel i klassen :)

aasahMedlem sedan mars 20033 451 inlägg
#5

Jo, det är ju riktigt! Men... jag har fixat det och resultatet är indentiskt likadant som förut. Alltså kvarstår problemet.

Inte för att jag fattar varför men det faktum att de båda printmetoderna faktiskt fungerade även innan det stod $this->db i konstruktorn tyder ju på att variabeln faktiskt fick rätt värde innan också. Hur nu det gick till? (Annars skulle väl inte mysql_query ha kunnat hämta värdena från min databas heller?) :q

Kent.JMedlem sedan aug. 2001151 inlägg
#6

Du sätter den lokala variablen men retunerar medlemsvariablen?

Bör det inte vara return res;

aasahMedlem sedan mars 20033 451 inlägg
#7

ÅÅÅÅÅÅH! Tusen tack!!! :D Vad man kan vara blind ibland....

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb