SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuch.php?group=47
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


PHP und MySQL-Verbindung


Jetzt sollten Sie prüfen, ob eine Verbindung zum MySQL-Server aufgebaut werden kann und via PHP auf vorhandene Datenbanken zugegriffen werden kann.

Prozedurale Syntax

<?php

// Verbindungsvariable samt Zugangsdaten festlegen
@$db = mysqli_connect('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

echo "Verbindung erfolgreich: " . mysqli_get_host_info($db) . "\n</br>";
echo "Server: " . mysqli_get_server_info($db);

// Verbindung zum Datenbankserver beenden
mysqli_close($db);

?>

Objektorientierte Syntax

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

echo "Verbindung erfolgreich: " . $db->host_info . "\n</br>";
echo "Server: " . $db->server_info;

// Verbindung zum Datenbankserver beenden
$db->close();

?>

Die erste Zeile stellt eine Verbindung zum MySQL-Server her. Dabei werden der Name des Hosts, der Benutzername und das Passwort übergeben. Optional kann als viertes Argument noch die zu verwendende Datenbank eingetragen werden. Auf einem lokalen Rechner verwenden Sie als Hostname localhost. Optional kann eine Portnummer übergeben werden. Der Standardwert für die Portnummer lautet 3306. Mit Portnummer hätte die Skriptzeile folgende Struktur:
@$db = new mysqli('localhost', 'matthias', 'geheim', '', '3306');

Sollte es zu Problemen beim Verbindungsaufbau kommen, wird die Ausgabe Verbindung fehlgeschlagen: Fehlercode sein.

Achtung: Das Verbindungsobjekt $db sollte immer gesetzt werden, um mit dessen Hilfe jederzeit auf die bestehende Verbindung zum MySQL-Server zugreifen zu können und beispielsweise die Verbindung zu beenden: $db->close(). Der Bezeichner für die Verbindungsvariable kann natürlich frei gewählt werden, anstatt $db würde sich auch $db_verbindung oder $server eignen.

Sollte der Verbindungsaufbau erfolgreich sein, erhalten Sie die Ausgabe Verbindung erfolgreich und Serverversion ($db->server_info) samt Verbindungstyp ($db->host_info). Anschließend wird mit der letzten Skriptzeile dafür gesorgt, dass die Verbindung zum MySQL-Server wieder beendet wird.

Sie sollten folgendes Skript testen.

Objektorientierte Syntax

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "SHOW DATABASES";

if ($resultat = $db->query($sql_befehl)) {
  // Meldung bei erfolgreicher Abfrage
  while($daten = $resultat->fetch_object() ){
    // Namen der Datenbanken ausgeben
    echo $daten->Database . "\n</br>";
  }
  // Anzahl der Abfragezeilen
  $anzahl = $resultat->num_rows;
  // Ausgabe
  printf("Abfrage enthält %d Datenbank(en).\n</br>", $anzahl);
  // Speicher freigeben
  $resultat->close();  
} else {
  // Meldung bei Fehlschlag
  echo "Zugriff fehlgeschlagen!";
}

// Verbindung zum Datenbankserver beenden
$db->close();

?>
{PSP}Prozedurale Syntax

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = mysqli_connect('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}

// SQL-Befehl
$sql_befehl = "SHOW DATABASES";

if ($resultat = mysqli_query($db, $sql_befehl)) {
  // Meldung bei erfolgreicher Abfrage
  while($daten = mysqli_fetch_object($resultat) ){
  // Namen der Datenbanken ausgeben
    echo $daten->Database . "\n</br>";
  }
  // Anzahl der Abfragezeilen
  $anzahl = mysqli_num_rows($resultat);
  // Ausgabe
  printf("Abfrage enthält %d Datenbank(en).\n</br>", $anzahl);
  // Speicher freigeben
  mysqli_free_result($resultat);  
} else {
  // Meldung bei Fehlschlag
  echo "Zugriff fehlgeschlagen!";
}

// Verbindung zum Datenbankserver beenden
mysqli_close($db);

?>

Die Ausgabe sollte in etwa wie folgt aussehen:
cdcol
mysql
testbank
praxisbuch
test
webauth
Abfrage enthält 6 Datenbank(en).


Fehlermeldungen unterdrücken

Ich hätte da noch einen speziellen Typ für Sie. Wenn die Verbindung fehlschlägt, wird eine Fehlermeldung erzeugt und ausgegeben. In diesem Fall können Sie diese Fehlermeldung unterdrücken, indem Sie vor den Verbindungsaufbau das @-Zeichen setzen. Das ist vor allem sinnvoll, wenn Sie eine eigene Fehlerbehandlung vornehmen wollen.

Beispiel – objektorientierte Syntax

<?php

// Verbindungs-Objekt samt Zugangsdaten festlegen
@$db = new mysqli('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}
else
{
  echo "Verbindung erfolgreich!";
}

?>

Sollten Sie eine Verbindungsvariable verwenden wollen, lässt sich eine Fehlerbehandlung auch wie folgt realisieren:

Beispiel – prozedurale Syntax

<?php

// Verbindungsvariable samt Zugangsdaten festlegen
@$db = mysqli_connect('localhost', 'matthias', 'geheim');

// Verbindung überprüfen
if (mysqli_connect_errno()) {
  printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
  exit();
}
else
{
  echo "Verbindung erfolgreich!";
}

?>
{PSP}Soll es noch etwas kompakter sein, dann ist diese Lösung genau richtig.

Beispiel – prozedurale Syntax

<?php

// Verbindungsvariable samt Zugangsdaten festlegen
@$db = mysqli_connect('localhost', 'matthias', 'geheim') OR die("Verbindung fehlgeschlagen: " . mysqli_connect_error());
// Verbindung – Ausgabe
echo "Verbindung erfolgreich!";

?>

Die erste Zeile versucht eine Datenbankverbindung aufzubauen und erzeugt im Erfolgsfall eine Verbindungsvariable, auf die Sie im weiteren Verlauf des Skripts mit der Variablen $db zugreifen können. Lässt sich die Verbindung nicht aufbauen, gibt die Funktion die() eine Fehlermeldung aus und bricht die Bearbeitung des Skripts ab.