Ankündigung

Einklappen
Keine Ankündigung bisher.

Was macht extract() bei einer sql-Abfrage??

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Iago
    hat ein Thema erstellt Was macht extract() bei einer sql-Abfrage??.

    Was macht extract() bei einer sql-Abfrage??

    Hallo, ich habe hier zum Beispiel eine sql-Abfrage mit Ausgabe der Daten:

    PHP-Code:
    $cxn connect_to_db('Vars.php');
    $sql_1 'SELECT * FROM order_item;
    $result = mysqli_query($cxn,$sql_1)
        or die ('
    sql_1'.mysqli_error($cxn));

    $n_row = mysqli_num_rows($result);     
    if($n_row < 1)
        {
            echo '
    Kein daten vorhanden';
            exit();
        }

        while($row = mysqli_fetch_assoc($result))
        {
           foreach ($row as $field => $value)

           {
               echo $field.' 
    '.$value.'<br/>';
           }

            } 
    Jetzt habe ich in einem Buch das gleiche Beispiel nur einfach mit

    extract($row); anstatt der foreach-Schleife (s.o.)

    Laut PHP: Hypertext Preprocessor importiert extract() Variablen eines Arrays in die aktuelle Symboltabelle.

    Aber was bedeutet Syboltabelle?
    Wikipeadia:In der Informatik ist eine Symboltabelle eine von Übersetzerprogrammen wie Compiler oder Interpreter verwendete Datenstruktur.

    Letzendlich sollen die Daten ja aber für den User ausgegeben werden?
    Wie kann ich den Zusammenhang verstehen?

    Vielen Dank!
    Gruß, Iago

  • nikosch
    antwortet
    Ganz sinnvoll finde ich extract für Funktionen, wenn man die Anzahl der Parameter nicht kennt. Ich benutze das gerne für PHP-Templates:

    PHP-Code:
    <?php
    // array reinstecken
    $data = array ();
    $data['name']  = 'Horst';
    $data['alter'] = 23;

    myTemplate::show ('viewPerson' $data);

    // in der Funktion direkt als Variablen nutzen

    function viewPerson ($data)
      {
      
    extract ($data);

      
    ?><h1>Hllo <?php echo $name?></h1>
      <p>Willkommen zurück im Usercenter!</p>
      <p>Du bist Jahre <b><?php echo $alter?></b> alt :(</p>
      <?php
      
    }
    Ansonsten sind die Arrays selbst meister sinnvoller zu benutzen.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    o.k., danke Flor1an!!

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Ja das Array wird auch nicht verändert, es werden eben nur die Werte im Array "extrahiert"! Somit sind die Werte am Array eben durch Variablen repräsentiert die eben wie die Keys im Array benannt sind.

    Aber wie gesagt, für so was ist extract wirklich nicht geeignet, verwende lieber das Array.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Also wird aus einer SQL-Spalte z.B.: ship_name
    dann $ship_name?

    z.B. für:

    PHP-Code:
    $sql 'SELECT ship_name,ship_street,ship_city,ship_state_ship_zip,phone,email
            FROM Customer_Order WHERE order_number = "'
    .$_SESSION['order_number'].'"'
    Also wenn das so stimmt, dann versteh ich totzdem nicht, was extract()
    so spezifisch macht. Ich habe immer
    gedacht, dass mysqli_fetch_assoc die Zuordnung von Werten zu (assoziativen) Array-Variablen schon vornimmt?

    Die beiden folgenden Beispiele ziegen auch das selbe an:

    PHP-Code:
    $row mysqli_fetch_assoc($result);

          
    extract($row);

          echo 
    var_dump($row).'<br/>'
    und

    PHP-Code:
    while($row mysqli_fetch_assoc($result))
        {

          echo 
    var_dump($row).'<br/>';

            } 

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Mit Symboltabelle sind die aktuell verfügbaren Variablen gemeint. Beispiel:

    PHP-Code:
    $array = array('a' = > 1'b' => 2);
    extract($array);
    // jetzt gibts folgende Variablen
    $a
    $b
    // mit den Werten aus dem Array 
    Wenn du es auf die $row anwendest kannst du halt mit Variablen arbeiten die den Spaltennamen entsprechen. Ich würd das aber nicht machen, extract() ist meiner Meinung nach NIE nötig!

    Einen Kommentar schreiben:

Lädt...
X