kostenloser Webspace werbefrei: lima-city


mysql_fetch_array()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    xxbashxx

    xxbashxx hat kostenlosen Webspace.

    So habe da so ein kleines ref="/tag/problem">Problem mit mysql_fetch_array()
    und zwar ich nehme mir einen Datensatz aus der DB per SELCET und speichere ihn dann ab und will ihn verarbeiten, so das funktionert auch so, nur das Problem ist das ich ganz sicher weiß das es Zwei Rückgabewerte gibt doch egal was ich versuche ich bekomme den Zweiten Wert nicht heraus.

    <?php
    
    $hos  = "localhost";
    $db    = 'test';
    $user  = "user";
    $pw	  = "******";
    $query   = "SELECT stunde FROM `Lehrer`"; 
    
    
    
    $connection		= mysql_connect($host,$user,$pw);
    mysql_select_db($db);
    $stunde 		       = mysql_query($query);
    $stunde_result       = mysql_fetch_array($stunde);
    
    echo $stunde_result;


    Beitrag zuletzt geändert: 22.7.2011 1:43:41 von xxbashxx
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Richtig, weil du bei jedem Funktionsaufruf nur den jeweils nächsten Datensatz bekommst. Du musst mysql_fetch_array() also so oft aufrufen, bis du alle Datensätze hast. Das macht man am besten mit einer Schleife. Wie das geht, wird hier beschrieben.
  4. xxbashxx schrieb:
    ... egal was ich versuche ich bekomme den Zweiten Wert nicht heraus.
    klar doch! du musst es mit while machen. sihe de.php.net.
    (nebenbei gibt es noch mysql-fetch-row und auch mysql-fetch-assoc je nach bessere verwendbarkeit.)

    lg

    ==== seltsam seltsam
    es hat eine funktion da gegeben, wenn jemand dazwischen gepostet hat wurde man gewarnt, dass jemand bereits eine antwort abgegeben hat. warum neulich nicht???? von der posting von @drafed-map VOR mir habe nichts mitbekommen beim schreiben.

    Beitrag zuletzt geändert: 22.7.2011 1:54:50 von hemiolos
  5. Autor dieses Themas

    xxbashxx

    xxbashxx hat kostenlosen Webspace.

    Vielen Dank für die Antworten :thumb:

    EDIT

    So das hätte ich jetzt raus aber nun möchte ich an einer stelle auf einen bestimmten Wert zugreifen uns zwar einmal auf den Ersten und einmal auf den Zweiten. So das Problem bei der Whileschleife ist ja das ich nicth weiß wie ich dafür sorgen kann das ich den ersten Datensatz in eine VAriabe bekomme und den Zweiten in eine Zweite Varible.




    Beitrag zuletzt geändert: 23.7.2011 1:20:26 von xxbashxx
  6. xxbashxx schrieb:
    ... einer stelle auf einen bestimmten Wert zugreifen uns zwar einmal auf den Ersten und einmal auf den Zweiten ...
    auf dein pm hier ein beispiel, wie das gehen kann:
    <?php
    
    $hos   = "localhost";
    #$db   = 'information_schema'; // ich selectiere normal datenbank
    $user  = "...";
    $pw    = "...";
    $conn  = ($c = mysql_connect($host,$user,$pw)) ?
      $c:
      exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true));
    
    $query = <<< EOT
    SELECT *
    FROM  information_schema.SCHEMATA
    EOT;
    
    $res = ($r = mysql_query($query)) ?
      $r:
      exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true));
    
    $rset  = '';
    $arset = null;
    $i     = 0;
    while($row = mysql_fetch_assoc($res)) {
      foreach($row as $k => $v) {
        $rset .= "<strong>$k</strong> - $v\n";
        $arset[$i][$k] = $v;
      }
      $rset .= "\n";
      $arset[++$i] = '----';
      $i++;
    }
    exit('<pre>' . print_r($arset, true) . '<hr />' . $rset . '</pre>');
    das ergebnis wird in der foreach schleife in ein array ($arset) und in einen (preformatierten) text ($rset) 'gesammelt' und am ende ausgegeben. im array kannst dann genau sehen, wo deine daten sind und wie die sie dann ansprechen kannst.

    obwohl dich hauptsächlich die array-variante interessiert, muss ich hier sagen, es besteht oft die möglichkeit queries so zu gestalten, dass man die ergebnisse so gut wie nicht behandeln muss. (damit hat man dann auch eine sinnvolle anwendung für das ding.) hier hast in der function 'CSelect::create_select()' ein html-select. mit dem kannst aus allen deinen mysql datenbanken eine auswählen. der ganze effektive code dazu hat gerade noch 12 zeilen, wovon eigentlich die query allein aus 8 besteht (na ja! macht ja auch die ganze arbeit [formatirt sogar den html-quelltext richtig]. so bleiben nur 4 zeilen php :o).
    <?php
    
    // CSelect test
    $s      = new CSelect();
    $select = $s->select;
    
    $html = <<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <title>CSelect - Test [MySQL]</title>
      </head>
      
      <body>
        <p>
    $select    </p>
      </body>
    </html>
    EOT;
    
    exit(''.$html);
    
    
    
    
    
    class CUser {
      public $user   = '...';
      public $passwd = '...';
    }
    
    class CDb extends CUser {
      public  $host  = 'localhost';
      public  $error = null;
      private $conn  = null;
      public  $res   = null;
    
      public function __construct() {
        $this->conn = ($c = mysql_connect($this->host, $this->user, $this->passwd)) ?
          $c:
          $this->error();
      }
    
      public function __destruct() {
        $this->conn = (is_resource($this->conn)) ? 
          mysql_close($this->conn):
          $this->error();
        $this->conn = null;
      }
    
      public function query($query) {
        $this->res = ($r = mysql_query($query)) ?
          $r:
          $this->error();
      }
    
      public function error() {
        $this->error = array(mysql_errno(), mysql_error());
      }
    }
    
    class CSelect extends CDb {
      public $select = null;
    
      public function __construct() {
        parent::__construct();
        $this->create_select();
      }
    
      public function create_select() {
        $query = <<< EOT
    SELECT '      <select id="db_select">\n'
    UNION
    SELECT CONCAT('        <option>', SCHEMA_NAME, '</option>\n') db
    FROM  information_schema.SCHEMATA
    UNION
    SELECT '      </select>\n'
    EOT;
    
        $this->query($query);
    
        while($row = mysql_fetch_assoc($this->res)) {
          foreach($row as $k => $v) {
            $this->select .= $v;
          }
        }
      }
    
      public function __toString() {
        return '<pre>' . print_r($this, true) . '</pre>';
      }
    
    }

    viel spass

    lg

    Beitrag zuletzt geändert: 23.7.2011 8:52:41 von hemiolos
  7. xxbashxx schrieb:
    Vielen Dank für die Antworten :thumb:

    EDIT

    So das hätte ich jetzt raus aber nun möchte ich an einer stelle auf einen bestimmten Wert zugreifen uns zwar einmal auf den Ersten und einmal auf den Zweiten. So das Problem bei der Whileschleife ist ja das ich nicth weiß wie ich dafür sorgen kann das ich den ersten Datensatz in eine VAriabe bekomme und den Zweiten in eine Zweite Varible.




    Da die Werte ja in irgendeiner Weise identisch sind, würde ich mit LEFT JOIN arbeiten. So hast du nur einen Query, wofür du vorher zwei brauchtest.
  8. fabo schrieb:
    ... Da die Werte ja in irgendeiner Weise identisch sind, würde ich mit LEFT JOIN arbeiten. So hast du nur einen Query, wofür du vorher zwei brauchtest.
    bin mir nicht ganz sicher! sprechen wir hier alle von der query: SELECT stunde FROM `Lehrer`????

    lg
  9. Autor dieses Themas

    xxbashxx

    xxbashxx hat kostenlosen Webspace.

    Vielen Dank für deine ausführliche Antwort namlos

    Und ja wir reden immer noch von der Query.
  10. xxbashxx schrieb:
    Vielen Dank für deine ausführliche Antwort namlos

    Und ja wir reden immer noch von der Query.
    <wer ist namlos?>
    er spricht aber von 2!

    fabo schrieb:
    ... Da die Werte ja in irgendeiner Weise identisch sind, würde ich mit LEFT JOIN arbeiten. So hast du nur einen Query, wofür du vorher zwei brauchtest.
    "Da die Werte ja in irgendeiner Weise identisch sind" - na klar. es ist nirgends verboten, dass ich in eine db->tabelle->spalte/ dreiquadrilliardenmal (3*10^24) die ganze biebel als blob hineinknalle. und das ist - herrschaften - 'jede menge gleiche' daten! (probierts zu hause nicht, euer speicher geht über ;o)
    dann möchten wir @fabo herzlichst bitten, auf die query
    SELECT stunde FROM `Lehrer`
    seine version zu veröffentlichen. (bin gespannt, was LEFT JOIN bringt.)

    lg
  11. Vergiss einfach, was ich schrieb. Ich hab das Ganze mit einem zuvor erstellten Thema verwechselt ;)
  12. fabo schrieb:
    Vergiss einfach, was ich schrieb. Ich hab das Ganze mit einem zuvor erstellten Thema verwechselt ;)
    na dann könne wir alle zufrieden sein (hätte mich ja gewundert ;o) und schluss und tschüss und ...

    lg
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!