Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich mysqli_query() in PHP?

Ich muss zugeben, mysqli_query() Die manuelle Eingabe enthält kein sauberes Beispiel zum Abrufen mehrerer Zeilen. Vielleicht liegt es daran, dass die Routine so routinemäßig ist und den PHP-Leuten seit Jahrzehnten bekannt ist:

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

Falls Sie die Spaltentitel drucken möchten, müssen Sie Ihre Daten zuerst in einem verschachtelten Array auswählen und dann die Schlüssel der ersten Zeile verwenden:

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

Einige Hosts haben möglicherweise keine Unterstützung für fetch_all() Funktion. Füllen Sie in einem solchen Fall die $data aus Array auf die übliche Weise:

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

Zwei wichtige Anmerkungen muss ich hinzufügen.

  1. Sie müssen mysqli so konfigurieren, dass Fehler automatisch ausgegeben werden, anstatt sie für jede mysqli-Anweisung manuell zu überprüfen. Fügen Sie dazu diese Zeile vorher ein mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Der wichtigste Hinweis: im Gegensatz zu mysql_query() , mysqli_query() hat eine sehr begrenzte Verwendung. Sie können diese Funktion nur verwenden, wenn keine Variablen in der Abfrage verwendet werden. Wenn eine PHP-Variable verwendet werden soll, sollten Sie niemals mysqli_query() verwenden , aber halten Sie sich immer an vorbereitete Aussagen , etwa so:

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

Es ist ein bisschen wortreich, muss ich zugeben. Um die Menge an Code zu reduzieren, können Sie entweder PDO verwenden oder eine einfache Hilfsfunktion verwenden um alle Vorbereitungen/Bindungen/Ausführungen darin zu erledigen:

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