sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bruger man mysqli_query() i PHP?

Jeg må indrømme, mysqli_query() manuel indtastning indeholder ikke et rent eksempel på, hvordan man henter flere rækker. Måske er det fordi rutinen er så rutinepræget, kendt af PHP-folk i årtier:

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

Hvis du vil udskrive kolonnetitlerne, skal du først vælge dine data i et indlejret array og derefter bruge nøglerne i den første række:

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

Nogle værter har muligvis ingen understøttelse af fetch_all() fungere. I et sådant tilfælde skal du udfylde $data array på den sædvanlige måde:

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

To vigtige bemærkninger, jeg skal tilføje.

  1. Du skal konfigurere mysqli til at kaste fejl automatisk i stedet for at kontrollere dem manuelt for hver mysqli-sætning. For at gøre det skal du tilføje denne linje før mysqli_connect() :

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    
  2. Den vigtigste bemærkning: i modsætning til mysql_query() , mysqli_query() har en meget begrænset anvendelse. Du må kun bruge denne funktion hvis ingen variabler skal bruges i forespørgslen. Hvis en PHP-variabel skal bruges, bør du aldrig bruge mysqli_query() , men hold dig altid til forberedte udsagn , sådan her:

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

Det er lidt ordrigt, må jeg indrømme. For at reducere mængden af ​​kode kan du enten bruge PDO eller anvende en simpel hjælpefunktion at gøre alle forberedelser/binder/udfør forretninger indeni:

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



  1. Kan ikke vælge hvor ip=inet_pton($ip)

  2. Kryptering af brugerdata til automatisk login til tredjepartssystem

  3. MySQL Entity Framework 4.0 Stored Procedure Field Mapping

  4. Opsætning af et udviklingsmiljø for at lære PL/SQL