sql >> データベース >  >> RDS >> Mysql

PHPでmysqli_query()を使用するにはどうすればよいですか?

    認めなければなりません、mysqli_query() 手動入力には、複数の行をフェッチする方法に関する明確な例が含まれていません。ルーチンが非常にルーチンであり、何十年もの間PHPの人々に知られているためかもしれません:

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

    列のタイトルを印刷する場合は、最初にデータをネストされた配列に選択してから、最初の行のキーを使用する必要があります。

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

    一部のホストは、fetch_all()をサポートしていない場合があります 働き。このような場合は、$dataに入力してください 通常の方法で配列します:

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

    追加する必要のある2つの重要な注意事項。

    1. 各mysqliステートメントを手動でチェックするのではなく、エラーを自動的にスローするようにmysqliを構成する必要があります。これを行うには、この行をに追加します mysqli_connect()

       mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
      
    2. 最も重要な注意事項: mysql_query()とは異なり 、mysqli_query() 使用は非常に限られています。この関数は、クエリで変数が使用されない場合にのみ使用できます。 PHP変数を使用する場合は、mysqli_query()を使用しないでください。 、ただし常に プリペアドステートメント に固執します。 、このように:

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

    それは少し言葉遣いです、私は認めなければなりません。コードの量を減らすには、PDOを使用するか、シンプルなヘルパー関数 を採用します。 内部ですべての準備/バインド/実行ビジネスを行うには:

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



    1. SQLServerクエリ-グループごとの乗算

    2. PHPを使用してSQLServerで文字列をエスケープする方法は?

    3. DockerでのMariaDBMaxScaleロードバランシング:デプロイメント:パート1

    4. アクセスがあなたのビジネスのお金を節約できる方法