Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie konvertiere ich ein Skript, das mysql_-Funktionen verwendet, um mysqli_-Funktionen zu verwenden?

Hinweis: Konvertieren von mysql_ zu mysqli_ möglicherweise nicht optimal. Betrachten Sie PDO wenn Sie bereit sind, Ihren gesamten Code in OOP umzuwandeln .

Es kann verlockend sein zu versuchen, alle Instanzen von mysql_ zu ersetzen mit mysqli_ und bete, dass es funktioniert. Du wärst nah dran, aber nicht ganz auf den Punkt.

Verbinden mit der Datenbank:

Glücklicherweise mysqli_connect arbeitet eng genug mit mysql_query zusammen dass Sie einfach ihre Funktionsnamen austauschen können.

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

Auswahl einer Datenbank

Jetzt mit den meisten anderen Funktionen in mysqli_ Bibliothek müssen Sie mysqli_select_db übergeben die Datenbankverbindung als erste Parameter. Die meisten der mysqli_ Funktionen benötigen zuerst das Verbindungsobjekt.

Für diese Funktion können Sie einfach die Reihenfolge der Argumente ändern, die Sie an die Funktion übergeben. Wenn Sie ihm vorher kein Verbindungsobjekt übergeben haben, müssen Sie es jetzt als ersten Parameter hinzufügen.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Als Bonus können Sie auch den Datenbanknamen als vierten Parameter an mysqli_connect übergeben - Umgehung der Notwendigkeit, mysqli_select_db aufzurufen .

$con = mysqli_connect($host, $username, $password, $dbname);

Benutzereingaben bereinigen

Verwenden von mysqli_real_escape_string ist sehr ähnlich zu mysql_real_escape_string . Sie müssen nur das Verbindungsobjekt als ersten Parameter übergeben.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

Sehr wichtig:Vorbereiten und Ausführen einer Abfrage

Ein Grund dafür ist mysql_ Funktionen von vornherein missbilligt wurden, war ihre Unfähigkeit, vorbereitete Anweisungen zu verarbeiten. Wenn Sie Ihren Code einfach in mysqli_ umwandeln Ohne diesen wichtigen Schritt unterliegen Sie einigen der größten Schwächen von mysql_ Funktionen.

Es lohnt sich, diese Artikel über vorbereitete Kontoauszüge und ihre Vorteile zu lesen:

Wikipedia - Vorbereitete Erklärungen

PHP.net - MySQLi vorbereitete Anweisungen

Hinweis:Wenn Sie vorbereitete Anweisungen verwenden, ist es am besten, jede Spalte, die Sie abzufragen versuchen, explizit aufzulisten, anstatt den * zu verwenden Notation, um alle Spalten abzufragen. Auf diese Weise können Sie sicherstellen, dass Sie alle Spalten in Ihrem Aufruf von mysqli_stmt_bind_result berücksichtigt haben .

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

Fehler anzeigen

Das Anzeigen von Fehlern funktioniert mit mysqli_ etwas anders . mysqli_error benötigt das Verbindungsobjekt als ersten Parameter. Aber was ist, wenn die Verbindung fehlschlägt? mysqli_ führt eine kleine Gruppe von Funktionen ein, die das Verbindungsobjekt nicht benötigen:der mysqli_connect_* Funktionen.

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}