mysqli_connect > Konstante

david07

Mitglied
Hi,

habe ein Problem. Sitze an einem recht großen Intranetprojekt, dass aus einer Menge Klassen und Functionen besteht.

Nun wollte ich meine DB-Verbindung in einer Konstanten speichern, damit ich nicht immer die verbindung in die einzelnen Funktionen oder Klassen übergeben muss.

Dachte an Folgendes:

PHP:
//Datei: mysql.php
$link = mysqli_connect($HOST, $User, $Passw, $dBase);
define("MYSQL_CON",    $link);
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

//Abfrage in einer anderern Datei:
$sql = "SELECT * FROM knd_stamm";
$res = mysqli_query(MYSQL_CON,$sql);

//beide Dateien werden in der index.php included

Ich bekomme jedoch immer die Rückmeldung: "Notice: Use of undefined constant MYSQL_CON - assumed 'MYSQL_CON' in [...]"

Ist es überhaupt möglich ein mysqli_connect als constante und nicht als var zu verwenden?

Danke schonmal!!
 
[phpf]define[/phpf]

Werte hat gesagt.:
Der Wert der Konstante. Es sind nur Skalar- und NULL-Werte sind erlaubt. Skalarwerte sind Ganzzahlen, Gleitkommazahlen, Zeichenketten oder boolsche Werte.

Das sollte alles erklären.
 
Es würde auf folgende Weise gehen... wobei das dann wieder dem Prinzip widerspricht, würde ich sagen ;)

PHP:
<?php

//Datei: mysql.php
$link = mysqli_connect('localhost', 'root', 'root', 'test');
define("MYSQL_CON", 'link');
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

print_r(${MYSQL_CON});
 
Hm, finde die Idee eigentlich nicht schlecht.

Mein anderer Ansatz wäre nun gewesen jedes mal auf die Tour eine Connection aufzubauen:

PHP:
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBAS);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql = "SELECT * FROM knd_stamm";

$result = $mysqli->query($sql);

$row = $result->fetch_array();

geht eigentlich auch, nur bisi mehr schreibarbeit.
Muss mich hier nur echt erstmal an den objecorientierten stiel für mysql gewöhnen. Hab das bisher nur procedural geschrieben... hm kurze Frage noch (hab erst vor kurzen mit oop begonnen):

warum behauptet er: Call to a member function fetch_array() on a non-object
 
Hi, wie wärs mit der folgenden sehr einfachen Lösung:
PHP:
function get_db()
{
  static $conn;

  if($conn === NULL)
  {
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBAS);

    if(mysqli_connect_errno())
    {
      printf("Connect failed: %s\n", mysqli_connect_error());

      exit;
    } 
  }

  return $conn;
}
Dann kannst dur dir an jeder beliebigen Stelle das MySQLi-Objekt holen mit einem simplen
PHP:
$mysqli = get_db();
das wäre auf jeden Fall ein sauberer Ansatz, der keine globalen Variablen benötigt und auch keinen unschönen Hack mit Konstanten, ausserdem hat es den Vorteil, dass die Datenbankverbindung nur bei Bedarf aufgebaut wird. ;)
 
Zuletzt bearbeitet:
Zurück