Weder noch!
Ihr erstes Beispiel verwendet eine Funktion, die vor Jahren aus PHP entfernt wurde. mysql_query()
existiert nicht und sollte nicht mehr verwendet werden. Der Grund, warum es entfernt wurde, ist, dass Sie stattdessen vorbereitete Anweisungen verwenden sollten. Sie werden entweder von mysqli- oder PDO-Erweiterungen bereitgestellt.
Ihr zweites Beispiel ist besser, aber es ist viel zu chaotisch.
- Sie sollten mysqli_query nicht
echo mysqli_query
. Von dieser Funktion kann nichts Nützliches ausgedruckt werden. - Gewöhnen Sie sich an, ständig vorbereitete Anweisungen zu verwenden und Platzhalter für variable Daten zu verwenden. Ab sofort sind Ihre Abfragen konstant, aber die Verwendung vorbereiteter Anweisungen ist immer noch eine gute Praxis, falls Sie später einen Parameter hinzufügen müssen.
- Vermeiden Sie die Verwendung von Funktionen wie
mysqli_fetch_array()
. Die Ergebnisoption einzeln zu durchlaufen ist unordentlich und selten nützlich. - Überprüfen Sie niemals den Rückgabewert von mysqli-Aufrufen. Es ist sinnlos. Aktivieren Sie stattdessen die Fehlerberichterstattung. Siehe Wie erhalte ich die Fehlermeldung in MySQLi?
- Stellen Sie immer den richtigen Zeichensatz ein. Es sollte
utf8mb4
sein 99% der Zeit. - Die SQL-Abfrage kann in einer separaten Variablen gespeichert werden, aber was bringt das? Sie übergeben es nur als Argument an die
query
Funktion. Es besteht keine Notwendigkeit, eine Zwischenvariable zu verwenden. - Verwenden Sie mysqli nicht. Sie sollten stattdessen PDO verwenden. Wenn Sie mysqli verwenden müssen, erstellen Sie zu diesem Zweck eine einfache Wrapper-Funktion oder -Klasse und führen Sie Ihre generische Funktion aus, anstatt mit mysqli-Funktionen herumzuspielen.
Hier ist ein Beispiel, wie ich es machen würde. Zuerst aktiviere ich die Fehlerberichterstattung für mysqli, ich öffne die Verbindung und setze den Zeichensatz. Dann deklariere ich eine Funktion, die 3 Parameter übernimmt und ein Array zurückgibt. Der erste Parameter ist Ihre gerade geöffnete Datenbankverbindung. Zweitens ist Ihre SQL-Abfrage mit Platzhaltern, falls vorhanden. Third ist optional und es ist ein Array von Werten, die als Parameter an die Platzhalter gebunden werden. Diese Funktion funktioniert für alle Arten von SQL-Abfragen. Der Rest des Codes wird wirklich einfach.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("myserver.com", "test", "sunil7117", "test");
$link->set_charset('utf8mb4'); // always set the charset
/**
* Executes an SQL query on the database.
*
* @param \mysqli $mysqli
* @param string $query e.g. SELECT * FROM users WHERE username=?
* @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
* @return array
*/
function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
$stmt = $mysqli->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}
prepared_query($link, "UPDATE user SET email='[email protected]' WHERE email='[email protected]' LIMIT 1");
echo "<br>";
$result = prepared_query($link, "SELECT * FROM user");
echo "welcome to database<br>";
if ($result) {
$row = $result[0];
echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
}