<?php
/*
require("class/FirstContact.class.php");
$superhero = new FirstContact();
$resArr = $superhero -> readMethod();
*/
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Erstes Beispiel: Lesen mit PDO</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed&family=Roboto:ital,wght@0,400;0,500;1,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<div id="container">
<h1>Erstes Beispiel: Lesen mit PDO</h1>
<p>Wir schreiben eine eigene Klasse, die PDO verwendet, deshalb ist es logisch, <strong>eine Subklasse von PDO</strong> zu entwerfen.</p>
<h2>Die Verbindung zur Datenbank herstellen</h2>
<p>Die Verbindung zur Datenbank stellt der Konstruktor der PDO-Klasse (Superklasse) her. Wir müssen diesen explizit aufrufen.</p>
<h3>DSN (erster Parameter)</h3>
<ul>
<li>Der erste Parameter für den Konstruktor ist ein sog. DSN (Wikipedia: <a href="http://de.wikipedia.org/wiki/Data_Source_Name" target="_blank">DSN</a></strong>).</li>
<li>Jedes Datenbank-System braucht einen spezifischen DSN, in diesem Beispiel verweden wir den DSN für MySQL.</li>
<li><strong>Tipp für alle Nicht-Angelsachsen</strong>, also komische Menschen, die mit UTF-8 in Datenbanken arbeiten müssen:<br>
<strong>Gib im DSN auch gerade den charset an:</strong><br>
<code>$dsn = "mysql:host=localhost;dbname=test;charset=utf8";</code><br>
Je nach Konfiguration deines Entwicklerstacks ist das nicht nötig, es schadet aber nichts, wenn das machst.</li>
<li><strong>8ung Stolperstein:</strong> Wenn du "localhost" im DSN angibst, geht die Klasse davon aus, dass die <strong>Standardports der Datenbank</strong> verwendet werden. Hast du in deiner Entwicklungsumgebung jedoch andere Ports definiert, musst du die <strong>IP-Nummer</strong> (meistens <code>host=127.0.0.1</code>) plus den <strong>Port</strong> <code>(port=####)</code> angeben.<br>
Je nach Konfiguration deines Entwicklerstacks ist dieser Schritt nicht nötig!</li>
</ul>
<h3>PDO-Optionen für die Verbindungsaufnahme (vierter Parameter)</h3>
<ul>
<li>Wenn du wie hier mit try und catch (s.o.) arbeiten möchtest, ist diese Option für die Fehlerbehandlung die sinnvollste:<br />
<code>PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION</code></li>
<li>Mit dieser Option werden die Resultate in Form von assoziativen Arrays retour kommen. In den meisten Fällen ist das der effizienteste Weg, die Resultate in HTML auszugeben:<br />
<code>PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC</code></li>
</ul>
<div class="output">
<table class="bordered">
<tr>
<th>Vorname</th>
<th>Nachname</th>
<th>Strasse</th>
<th>Nr</th>
<th>PLZ</th>
<th>Ort</th>
</tr>
<?php
/*
foreach ($resArr as $row) {
echo "<tr>\n";
echo "<td>".$row['Vorname']."</td>\n";
echo "<td>".$row['Nachname']."</td>\n";
echo "<td>".$row['Strasse']."</td>\n";
echo "<td>".$row['Nr']."</td>\n";
echo "<td>".$row['PLZ']."</td>\n";
echo "<td>".$row['Ort']."</td>\n";
echo "</tr>\n";
}
*/
?>
</table>
</div>
</div>
</body>
</html>