Ani!
Twój pierwszy przykład używa funkcji, która została usunięta z PHP wiele lat temu. mysql_query()
nie istnieje i nie powinien być już używany. Powodem, dla którego został usunięty, jest to, że powinieneś zamiast tego używać przygotowanych wyciągów. Są one dostarczane przez rozszerzenia mysqli lub PDO.
Twój drugi przykład jest lepszy, ale jest zbyt niechlujny.
- Nie powinieneś
echo mysqli_query
. Nie ma nic użytecznego do wydrukowania z tej funkcji. - Nabierz nawyku używania przygotowanych instrukcji przez cały czas i używaj symboli zastępczych dla zmiennych danych. W tej chwili Twoje zapytania są stałe, ale korzystanie z przygotowanych instrukcji nadal jest dobrą praktyką na wypadek, gdybyś musiał później dodać parametr.
- Unikaj używania funkcji takich jak
mysqli_fetch_array()
. Powtarzanie opcji wyniku jeden po drugim jest kłopotliwe i rzadko przydatne. - Nigdy nie sprawdzaj wartości zwracanych wywołań mysqli. To bezcelowe. Zamiast tego włącz raportowanie błędów. Zobacz Jak uzyskać komunikat o błędzie w MySQLi?
- Zawsze ustawiaj poprawny zestaw znaków. Powinien to być
utf8mb4
99% czasu. - Zapytanie SQL można zapisać w osobnej zmiennej, ale po co? Przekażesz go tylko jako argument do
query
funkcjonować. Nie ma potrzeby używania zmiennej pośredniej. - Nie używaj mysqli. Zamiast tego powinieneś użyć PDO. Jeśli musisz użyć mysqli, stwórz prostą funkcję lub klasę opakowującą w tym celu i wykonaj swoją ogólną funkcję zamiast bawić się funkcjami mysqli.
Oto przykład, jak bym to zrobił. Najpierw włączam raportowanie błędów dla mysqli, otwieram połączenie i ustawiam zestaw znaków. Następnie deklaruję funkcję, która pobiera 3 parametry i zwraca tablicę. Pierwszy parametr to połączenie z bazą danych, które właśnie otworzyłeś. Drugi to zapytanie SQL z symbolami zastępczymi, jeśli takie istnieją. Trzecia jest opcjonalna i jest to tablica wartości, które mają być powiązane z symbolami zastępczymi jako parametry. Ta funkcja działa dla wszystkich rodzajów zapytań SQL. Reszta kodu staje się naprawdę prosta.
<?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>";
}