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);
}
}