webForumDet fria alternativet
Logga in / Bli medlem

Klasstrul

PHP

6 svar · 275 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Trådstart#1

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

Medlem sedan juni 20008 205 inlägg
#2

Re: Klasstrul

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

Medlem sedan mars 20034 471 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>";

?>
Medlem sedan juni 20008 205 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 :)

Medlem sedan mars 20034 471 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

Medlem sedan aug. 2001153 inlägg
#6

Du sätter den lokala variablen men retunerar medlemsvariablen?

Bör det inte vara return res;

Medlem sedan mars 20034 471 inlägg
#7

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

259 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)