Heller ikke!
Dit første eksempel bruger funktion, som er blevet fjernet fra PHP for år siden. mysql_query()
eksisterer ikke og bør ikke bruges længere. Grunden til, at den blev fjernet, er, at du i stedet skal bruge udarbejdede udsagn. De leveres af enten mysqli- eller PDO-udvidelser.
Dit andet eksempel er bedre, men det er alt for rodet.
- Du bør ikke
echo mysqli_query
. Der er ikke noget nyttigt at udskrive fra denne funktion. - Bliv til en vane med at bruge forberedte udsagn hele tiden og brug pladsholdere til variable data. Lige nu er dine forespørgsler konstante, men det er stadig en god praksis at bruge forberedte udsagn, hvis du skal tilføje en parameter senere.
- Undgå at bruge funktioner som
mysqli_fetch_array()
. At gentage resultatet én efter én er rodet og sjældent nyttigt. - Tjek aldrig returværdien af mysqli-kald. Det er meningsløst. Aktiver fejlrapportering i stedet. Se Hvordan får man fejlmeddelelsen i MySQLi?
- Indstil altid det korrekte tegnsæt. Det skal være
utf8mb4
99 % af tiden. - SQL-forespørgslen kan gemmes i en separat variabel, men hvad er meningen? Du vil kun sende det som et argument til
query
fungere. Der er ingen grund til at bruge en mellemvariabel. - Brug ikke mysqli. Du bør bruge PDO i stedet. Hvis du skal bruge mysqli, så opret en simpel indpakningsfunktion eller klasse til dette formål og udfør din generiske funktion i stedet for at rode rundt med mysqli-funktioner.
Her er et eksempel på, hvordan jeg ville gøre det. Først aktiverer jeg fejlrapportering for mysqli, jeg åbner forbindelsen og indstiller tegnsættet. Så erklærer jeg en funktion, som tager 3 parametre og returnerer et array. Første parameter er din databaseforbindelse, du lige har åbnet. For det andet er din SQL-forespørgsel med pladsholdere, hvis der er nogen. Den tredje er valgfri, og det er en række værdier, der skal bindes til pladsholderne som parametre. Denne funktion fungerer til alle slags SQL-forespørgsler. Resten af koden bliver virkelig simpel.
<?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>";
}