Hauptmenü

Untermenü

Advanced SQL - Praxistutorial 2 - Angebote von mir anzeigen

1. Die Abschnitte

2. Die Methode

... mit der wir uns nun beschäftigen, schimpft sich getMyOffers und gehört zur Klasse Market. Aber das solltet ihr eigentlich selber erkennen, wenn ihr in der Hauptnavigation auf "Angebote von mir" klickt.

3. Und jetzt mit Bindung

Im ersten Praxistutorial haben wir uns schon ein wenig mit Prepared Statements beschäftigt. Und jetzt zeige ich euch mal, wie man zuerst den Query vorbereitet und dann in einem Rutsch ausführt.

Der Query

Diesmal arbeiten wir mit "konkreten" Platzhaltern, nämlich :myid und :compid. Der Rest sollte eigentlich klar sein.


$query 'SELECT
            a.id,
            m1.name AS an,
            m2.name AS fuer,
            a.preis
          FROM
            angebot a
          INNER JOIN
            mitglied m1 ON a.an = m1.id
          INNER JOIN
            mitglied m2 ON a.fuer = m2.id
          WHERE a.von = :myid
            AND a.fuer != :compid';

Ein Hinweis

Eigentlich ist der zweite Platzhalter :compid überflüssig wie ein Kropf(f). Ich habe ihn auch nur eingebaut, um euch etwas zu zeigen.

4. Daten aufbereiten und übergeben


$params = array(
  ':myid' => array($_SESSION['login'], PDO::PARAM_INT), 
  ':compid' => array(0PDO::PARAM_INT)
);
$result $this -> db -> selectWithBind($query$params);      

Erläuterung

Zunächst bauen wir uns ein einfaches Array. Der Index beinhaltet den Platzhalter des Queries und das folgende Array besteht aus dem gewünschten Wert und dem PDO-Typ. Übersetzt bedeutet das für die Abfrage: "Hol mir alle Angebote, wo der Anbieter meinen Session-Wert hat und nicht der Computer (0) ist. Dann übergeben wir den Query und besagtes Array an die Methode selectWithBind der Klasse Db.

Die Methode selectWithBind


public function selectWithBind($query$params) {
  $stmt  $this -> prepare($query);
  foreach ($params as $key => $value) {
    $stmt -> bindParam($key$value[0], $value[1]);
  }
  $stmt -> execute();
  return $stmt -> fetchAll(FETCH);
}

Erläuterung

Da ich auf die grundsätzliche Vorgehensweise bei Prepared Statements schon im vorherigen Tutorial eingegangen bin konzentrieren wir uns hier nur auf die wichtigen Abschnitte. Wichtig ist vor allem die Schleife. Denn da durchlaufen wir das Array $params und "fügen" die Werte mittels bindParam in die Abfrage ein. Nach dem execute werden dann die Daten über die PDO-Methode fetchAll geholt.

5. Die Ausgabe

Also, zu dem Mäusefürz sage ich gar nichts mehr. Achtet nur auf die checkbox, die Parameter im action-Attribut des Formulars und beim Link in der Schleife.


$html   '<form action="index.php?do=myoffer" method="post">
            <table cellspacing="0" cellpadding="0">
            <tr>                    
              <th></th>
              <th>An</th>
              <th>Für</th>                    
              <th>Gold</th>  
            </tr>';
for ($i 0$i count($result); $i++) {  
  $link 'index.php?do=modify&id='.$result[$i]['id'];
  $html .= '<tr>
              <td>
                <input type="checkbox" name="id[]" value="'.$result[$i]['id'].'" />
              </td>
              <td>
                <a href="'.$link.'">'.$result[$i]['an'].'</a>
              </td>
              <td>'.$result[$i]['fuer'].'</td>
              <td>'.$result[$i]['preis'].'</td>                                       
            </tr>';
}
$html .= '<tr>
            <td colspan="5">
              <input type="hidden" name="do" value="cancel" />
              <input type="submit" value="Zurückziehen" />
            </td>
          </tr></table></form>';
return $html;

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt