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

Как да използвам mysqli_query() в PHP?

Трябва да призная, mysqli_query() ръчното въвеждане не съдържа чист пример за това как да извлечете няколко реда. Може би защото рутината е толкова рутинна, позната на PHP хората от десетилетия:

$result = $link->query("DESCRIBE students");
while ($row = $result->fetch_assoc()) {
    // to print all columns automatically:
    foreach ($row as $value) {
        echo "<td>$value</td>";
        // OR to print each column separately:
        echo "<td>",$row['Field'],"</td><td>",$row['Type'],"</td>\n";
    }
}

В случай, че искате да отпечатате заглавията на колоните, първо трябва да изберете данните си във вложен масив и след това да използвате клавишите на първия ред:

// getting all the rows from the query
// note that handy feature of OOP syntax
$data = $link->query("DESC students")->fetch_all(MYSQLI_ASSOC);
// getting keys from the first row
$header = array_keys(reset($data));
// printing them
foreach ($header as $value) {
    echo "<td>$value</td>";
}
// finally printing the data
foreach ($data as $row) {
    foreach ($row as $value) {
        echo "<td>$value</td>";
    }
}

Някои хостове може да нямат поддръжка за fetch_all() функция. В такъв случай попълнете $data подредете по обичайния начин:

$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
    $data[] = $row;
}

Две важни бележки, които трябва да добавя.

  1. Трябва да конфигурирате mysqli да хвърля грешки автоматично, вместо да ги проверявате ръчно за всеки израз на mysqli. За да направите това, добавете този ред преди mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Най-важната забележка: за разлика от mysql_query() , mysqli_query() има много ограничена употреба. Можете да използвате тази функция само ако в заявката няма да се използват променливи. Ако ще се използва някаква PHP променлива, никога не трябва да използвате mysqli_query() , но винаги се придържайте към подготвени изявления , като това:

     $stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?");
     $stmt->bind_param('i', $class);
     $stmt->execute();
     $data = $stmt->get_result()->fetch_all();
    

Малко е многословно, трябва да призная. За да намалите количеството код, можете да използвате PDO или да приемете проста помощна функция за да извършите цялата подготовка/свързване/изпълнение вътре:

$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване от MS SQL Server в MySQL база данни

  2. Извикайте mysql вложени/вътрешни функции в querydsl

  3. MySQL Бавен при присъединяване. Всеки начин да се ускори

  4. Именуването на схемата за хибернация се различава в различните ОС

  5. Най-добрият инструмент за настройка на производителността на MySQL?