• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Verbindung zu MySQL Datenbank herstellen - PHP Funktion gesucht

Kirschtomate

New member
Hallo,

an mehreren Stellen meiner Website greife ich auf eine MySQL Datenbank zu. Bisher habe ich in den betreffenden Scripten jeweils folgenden Code stehen:

Code:
@$db = new mysqli('host', 'benutzer', 'passwort', 'name_der_datenbank');
 if (mysqli_connect_errno()) {
 echo 'Keine Verbindung zur Datenbank: ' . mysqli_connect_error();
 footer_ausführen();
 exit();
 }

Sinnvoller erscheint es mir einmalig eine Funktion zu erstellen und in den betreffenden Scripten diese Funktion auszuführen. Ich habe meinen Code daher geändert:

Code:
function verbindung_db() {
 $db = new mysqli('host', 'benutzer', 'passwort', 'name_der_datenbank');
 if (mysqli_connect_errno()) {
 echo 'Keine Verbindung zur Datenbank: ' . mysqli_connect_error();
 footer_ausführen();
 exit();
 } else {
 return $db;
 }
}

bzw.

Code:
@$db = verbindung_db();

Nun bin ich ein PHP und MySQL Anfänger und kann daher nicht einschätzen wie elegant diese Lösung ist. Jedenfalls funktioniert sie! Was haltet ihr davon?
 
Sieht doch nicht schlecht aus, sowas ähnliches habe ich mir auch überlegt, hatte bisher allerdings keine Zeit das in meinen Projekten umzusetzen.
 
Wieso erzeugst du da überhaupt jedesmal ein neues MySQLi-Objekt? Ich hab' da immer ein globales $db-Objekt, das meine ganzen MySQL-Operationen durchführt.
 
$db in der funktion als static deklarieren, dann wir das recyclet und nicht jedes mal neu initialisiert.
 
Wieso erzeugst du da überhaupt jedesmal ein neues MySQLi-Objekt? Ich hab' da immer ein globales $db-Objekt, das meine ganzen MySQL-Operationen durchführt.

Das habe ich in Anlehnung an mein Buch so gemacht:

Code:
function db_connect()
{
    $result = new mysqli('localhost', 'book_sc', 'password', 'book_sc');
    if (!$result)
        return FALSE;
    $result->autocommit(TRUE);
    return $result;
}

Quelle: PHP 5 und MySQL 5 - Luke Welling und Laura Thomson (Kapitel 27)

Anscheinend der gleiche Ansatz, nur dass im entsprechenden Kapitel mit Exceptions gearbeitet wird.

$db in der funktion als static deklarieren, dann wir das recyclet und nicht jedes mal neu initialisiert.

Wie stelle ich das als PHP Jungspund an?
 
Ich verwende für sowas meist eine Registry-Klasse, in der ich vorher alle notwendigen Verbindungen gespeichert habe.
 
In Bezug auf deinen Link und skoolis Beitrag habe ich nun in der Funktion vor $db einfach static geschrieben. Allerdings erhalte ich beim Aufruf meiner Seite nun sofort eine Fehlermeldung (unexpected T_NEW).

Auf die static-deklaration darf kein statement folgen, das kann man umgehen:

PHP:
function db() {
    static $result = null;
    if($result === null) {
        $result = new mysqli('localhost', 'book_sc', 'password', 'book_sc');
        if(!$result) return false;
        $result->autocommit(true);
    }
    return $result;
}

jedes mal wenn man dann das db-objekt braucht kann man einfach db() aufrufen, beim ersten aufruf wird das objekt erstellt, bei allen folgenden aufrufen einfach nur zurückgegeben
 
Ich weiß in Skriptsprachen ist es egal, welchen Datentyp eine Funktion zurück gibt. Aber der Ästhetik wegen, das gegenteil eines Objektes (mysqli) ist null nicht false. Daher sollte die Funktion eher so aussehen:
PHP:
function db() {
    static $result = null;
    if(!$result) {
        $result = new mysqli('localhost', 'book_sc', 'password', 'book_sc');
        if($result) {$result->autocommit(true);}
    }
    return $result;
}
 
Danke für eure Antworten. Ich werde gleich morgen (eigentlich heute) eure Lösungen genauer ansehen.

Nach einer Verbindung zur Datenbank und der darauf folgenden Abfrage verwende ich übrigens immer "$db->close();". So wird das auch in meinem Buch gemacht, leider habe ich zuvor vergessen, das zu erwähnen.
 
Zurück
Oben