Frage

Ich versuche, Code von mysql zu konvertieren mysqli. Der Code verwendet eine einzelne mysql_connect in einer Datei, die durch jede andere Datei enthalten ist.

mysql_connect eine MySQL-Verbindungskennung zurückgibt, die Superglobal ist, so dass Sie auf, die eine Datenbankverbindung in jedem Ihrer eigenen Funktionen verlassen können.

Es sieht aus wie mit mysqli_connect dies nicht der Fall ist, kehrte das Objekt nicht global.

Heißt das, ich hinzufügen: global $ mysqli; an der Spitze jeder Funktion, oder gibt es eine Möglichkeit, es eine superglobalen zu machen?

War es hilfreich?

Lösung

auf der Tatsache, Berufung, dass PHP die letzte Verbindungsressource geöffnet verwenden, wenn Sie keinen festlegen, ist wahrscheinlich nicht eine sehr gute Idee.
Was passiert, wenn Ihre Anwendung ändert und Sie zwei Verbindungen benötigen, oder die Verbindung ist nicht da?
So scheint es Sie müssen auf jeden Fall etwas Refactoring tun.

Hier ist eine Lösung ähnlich wie Karstens, die immer das gleiche mysqli-Objekt zurück.

class DB {
    private static $mysqli;
    private function __construct(){} //no instantiation

    static function cxn() {
        if( !self::$mysqli ) {
            self::$mysqli = new mysqli(...);
        }
        return self::$mysqli;
    }
}        

//use
DB::cxn()->prepare(....

Andere Tipps

Ich mache in der Regel eine Funktion:

$mysqli = new mysqli(...);

function prepare($query) {
  global $mysqli;
  $stmt = $msqyli->prepare($query);
  if ($mysqli->error()) {
    // do something
  }
  return $stmt;
}

function doStuff() {
  $stmt = prepare("SELECT id, name, description FROM blah");
  // and so on
}

und rufen Sie dann die. Davon abgesehen, habe ich zu, da aufgegeben Mysqli als zu verwanzten verwendbar betrachtet werden. Schade eigentlich.

Um etwas oop Ihnen vorstellen und Ihr Problem lösen, können Sie eine Klasse wie folgt verwenden:

class MyDatabase
{
    private static $_connection;

    public static function connect()
    {
        $mysqli = new mysqli(...);
        self::$_connection = $mysqli;
    }

    public static function getConnection()
    {
        return self::$_connection;
    }
}

In der Datenbank-Verbindungsdatei würden Sie diese Klasse laden und MyDatabase::connect(); einmal ausführen. Um die $ mysqli-Verbindung überall in Ihrem Skript, rufen Sie einfach MyDatabase::getConnection();.

Eine sehr einfache Möglichkeit, dies zu tun, mit einer festen Datenbankklasse sein würde, nur um das mysqli Verbindungsobjekt zu halten:

class Database {
    public static $connection;
}

Database::$connection = new mysqli(HOST, USERNAME, PASSWORD, DATABASE);

Dann können Sie es in der normalen Art und Weise zuzugreifen:

$sql = 'SELECT * FROM table';
$result = Database::$connection->query($sql);
$result = mysqli_query(Database::$connection, $sql);
echo 'Server info ' . mysqli_get_server_info(Database::$connection);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top