Нито едното!
Първият ви пример използва функция, която е премахната от PHP преди години. mysql_query()
не съществува и не трябва да се използва повече. Причината, поради която е премахнат, е, че вместо това трябва да използвате подготвени оператори. Те се предоставят от mysqli или PDO разширения.
Вторият ти пример е по-добър, но е твърде разхвърлян.
- Не трябва да
echo mysqli_query
. Няма нищо полезно за разпечатване от тази функция. - Вземете навик да използвате подготвени изрази през цялото време и използвайте заместители за променливи данни. Към момента вашите заявки са постоянни, но използването на подготвени оператори все още е добра практика, в случай че трябва да добавите параметър по-късно.
- Избягвайте да използвате функции като
mysqli_fetch_array()
. Повторението на опцията за резултат един по един е разхвърляно и рядко полезно. - Никога не проверявайте върнатата стойност на извикванията на mysqli. Безсмислено е. Вместо това активирайте отчитането на грешки. Вижте Как да получите съобщението за грешка в MySQLi?
- Винаги задавайте правилния набор от знаци. Трябва да е
utf8mb4
99% от времето. - SQL заявката може да бъде запазена в отделна променлива, но какъв е смисълът? Ще го предадете само като аргумент на
query
функция. Няма нужда да използвате междинна променлива. - Не използвайте mysqli. Вместо това трябва да използвате PDO. Ако трябва да използвате mysqli, тогава създайте проста функция или клас за обвивка за тази цел и изпълнете вашата обща функция, вместо да се забърквате с функциите на mysqli.
Ето един пример как бих го направил. Първо активирам отчитането на грешки за mysqli, отварям връзката и задавам набора от знаци. След това декларирам функция, която приема 3 параметъра и връща масив. Първият параметър е връзката с вашата база данни, която току-що сте отворили. Второто е вашата SQL заявка с заместители, ако има такива. Третото е по избор и представлява масив от стойности, които трябва да бъдат обвързани с заместителите като параметри. Тази функция работи за всички видове SQL заявки. Останалата част от кода става наистина проста.
<?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>";
}