Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać mysqli_query() w PHP?

Muszę przyznać, mysqli_query() ręczne wprowadzanie nie zawiera czystego przykładu pobierania wielu wierszy. Być może dzieje się tak dlatego, że rutyna jest tak rutynowa, znana ludziom PHP od dziesięcioleci:

$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";
    }
}

Jeśli chcesz wydrukować tytuły kolumn, musisz najpierw wybrać dane do zagnieżdżonej tablicy, a następnie użyć klawiszy pierwszego wiersza:

// 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>";
    }
}

Niektóre hosty mogą nie obsługiwać funkcji fetch_all() funkcjonować. W takim przypadku wypełnij $data tablica w zwykły sposób:

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

Dwie ważne uwagi, które muszę dodać.

  1. Musisz skonfigurować mysqli, aby automatycznie zgłaszał błędy, zamiast sprawdzać je ręcznie dla każdej instrukcji mysqli. Aby to zrobić, dodaj ten wiersz przed mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Najważniejsza uwaga: w przeciwieństwie do mysql_query() , mysqli_query() ma bardzo ograniczone zastosowanie. Możesz użyć tej funkcji tylko jeśli w zapytaniu nie będą używane żadne zmienne. Jeśli jakakolwiek zmienna PHP ma być użyta, nigdy nie powinieneś używać mysqli_query() , ale zawsze trzymaj się przygotowanych instrukcji , tak:

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

Muszę przyznać, że to trochę przegadane. Aby zmniejszyć ilość kodu, możesz użyć PDO lub zastosować prostą funkcję pomocniczą aby wykonać wszystkie czynności związane z przygotowaniem / wiązaniem / wykonaniem w środku:

$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. @GeneratedValue polimorficzna abstrakcyjna nadklasa nad MySQL

  2. mysql:wybierz wszystkie elementy z tabeli A, jeśli nie istnieją w tabeli B

  3. Jak podłączyć Amazon RDS w iOS?

  4. Czy istnieje odpowiednik SQLite do DESCRIBE [tabela] MySQL?

  5. MySQL:Co oznacza % w kolumnie hosta i jak zmienić hasło użytkownika