Mysql
 sql >> база данни >  >> RDS >> Mysql

Кой е по-добрият начин за писане на PHP код за вмъкване на данни

Нито едното!

Първият ви пример използва функция, която е премахната от 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>";
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. F# грешка 'грешка FS0039:Пространството от имена или модулът 'MySql' не е дефиниран'?

  2. Създателят на заявки не вмъква времеви печати

  3. Как да дадете всички привилегии на база данни в MySQL

  4. как да използвате PDO обект за връзка в различни файлове

  5. Няма грешка в избраната база данни в PHP с MySQLi