sql >> Database >  >> RDS >> Mysql

Hoe gebruik ik mysqli_query() in PHP?

Ik moet toegeven, mysqli_query() handmatige invoer bevat geen duidelijk voorbeeld over het ophalen van meerdere rijen. Misschien is het omdat de routine zo routine is, die PHP-mensen al tientallen jaren kennen:

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

Als u de kolomtitels wilt afdrukken, moet u eerst uw gegevens in een geneste array selecteren en vervolgens de toetsen van de eerste rij gebruiken:

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

Sommige hosts hebben mogelijk geen ondersteuning voor de fetch_all() functie. Vul in dat geval de $data array op de gebruikelijke manier:

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

Twee belangrijke opmerkingen die ik moet toevoegen.

  1. U moet mysqli configureren om automatisch fouten te genereren in plaats van ze handmatig voor elke mysqli-instructie te controleren. Voeg hiervoor deze regel voor . toe mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. De belangrijkste opmerking: in tegenstelling tot mysql_query() , mysqli_query() heeft een zeer beperkt gebruik. U mag deze functie alleen gebruiken als er geen variabelen in de query worden gebruikt. Als er een PHP-variabele wordt gebruikt, moet u nooit mysqli_query() gebruiken , maar blijf altijd bij voorbereide verklaringen , zoals dit:

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

Het is een beetje langdradig, moet ik toegeven. Om de hoeveelheid code te verminderen, kunt u een PDO gebruiken of een eenvoudige helperfunctie gebruiken om al het voorbereiden/binden/uitvoeren van zaken binnen te doen:

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



  1. Normaliseer transactiegegevens van tijd- en statuskolommen naar minuten per statuswaarde

  2. Oracle:valutabedrag in woorden converteren met PL/SQL

  3. Postgresql dwingt een unieke tweerichtingscombinatie van kolommen af

  4. Mysql naar mysqli converteren?