sql >> Databasteknik >  >> RDS >> Mysql

Hur använder man mysqli_query() i PHP?

Jag måste erkänna, mysqli_query() manuell inmatning innehåller inte ett rent exempel på hur man hämtar flera rader. Kanske beror det på att rutinen är så rutin, känd för PHP-folk i årtionden:

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

Om du vill skriva ut kolumntitlarna måste du först välja dina data i en kapslad array och sedan använda nycklar på den första raden:

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

Vissa värdar kanske inte har något stöd för fetch_all() fungera. I så fall fyller du i $data array på vanligt sätt:

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

Två viktiga anteckningar måste jag lägga till.

  1. Du måste konfigurera mysqli för att kasta fel automatiskt istället för att kontrollera dem för varje mysqli-sats manuellt. För att göra det, lägg till den här raden före mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Den viktigaste anmärkningen: till skillnad från mysql_query() , mysqli_query() har en mycket begränsad användning. Du får endast använda den här funktionen om inga variabler kommer att användas i frågan. Om någon PHP-variabel ska användas ska du aldrig använda mysqli_query() , men håll dig alltid till förberedda uttalanden , så här:

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

Det är lite ordrikt måste jag erkänna. För att minska mängden kod kan du antingen använda PDO eller använda en enkel hjälpfunktion för att göra alla förberedelser/binda/köra affärer inuti:

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



  1. Infoga en arabisk text MySQL

  2. Vad är det bästa sättet att infoga och uppdatera en enradstabell i MySQL?

  3. Bästa metoder i PHP och MySQL med internationella strängar

  4. Hur date_trunc() fungerar i PostgreSQL