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

挿入データ用のPHPコードを書くためのより良い方法はどれですか

    どちらでもない!

    最初の例では、数年前にPHPから削除された関数を使用しています。 mysql_query() 存在しないため、使用しないでください。削除された理由は、代わりにプリペアドステートメントを使用する必要があるためです。これらは、mysqliまたはPDO拡張機能のいずれかによって提供されます。

    2番目の例の方が優れていますが、面倒です。

    • echo mysqli_queryを使用しないでください 。この関数から出力するのに役立つものは何もありません。
    • プリペアドステートメントを常に使用する習慣を身に付け、変数データにプレースホルダーを使用します。現在のところ、クエリは一定ですが、後でパラメータを追加する必要がある場合に備えて、プリペアドステートメントを使用することをお勧めします。
    • mysqli_fetch_array()などの関数の使用は避けてください 。結果オプションを1つずつ繰り返すのは面倒で、ほとんど役に立ちません。
    • mysqli呼び出しの戻り値を確認しないでください。それは無意味です。代わりにエラーレポートを有効にしてください。 MySQLiでエラーメッセージを取得する方法 を参照してください
    • 常に正しい文字セットを設定してください。 utf8mb4である必要があります 99%の確率で。
    • SQLクエリは別の変数に保存できますが、ポイントは何ですか? queryへの引数としてのみ渡します 関数。中間変数を使用する必要はありません。
    • mysqliを使用しないでください。代わりにPDOを使用する必要があります。 mysqliを使用する必要がある場合は、この目的のために単純なラッパー関数またはクラスを作成し、mysqli関数をいじくり回す代わりに総称関数を実行します。

    これが私がそれを行う方法の例です。まず、mysqliのエラー報告を有効にし、接続を開いて文字セットを設定します。次に、3つのパラメーターを受け取り、配列を返す関数を宣言します。最初のパラメータは、開いたばかりのデータベース接続です。 2つ目は、プレースホルダーがある場合はプレースホルダーを使用したSQLクエリです。 3番目はオプションであり、パラメーターとしてプレースホルダーにバインドされる値の配列です。この関数は、あらゆる種類のSQLクエリで機能します。コードの残りの部分は本当に単純になります。

    <?php
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = new mysqli("myserver.com", "test", "sunil7117", "test");
    $link->set_charset('utf8mb4'); // always set the charset
    
    /**
     * Executes an SQL query on the database.
     *
     * @param \mysqli $mysqli
     * @param string $query e.g. SELECT * FROM users WHERE username=?
     * @param array $params An array of parameters to be bound in the given order to the placeholders in SQL
     * @return array
     */
    function prepared_query(\mysqli $mysqli, string $query, array $params = []): array {
        $stmt = $mysqli->prepare($query);
        if ($params) {
            $stmt->bind_param(str_repeat("s", count($params)), ...$params);
        }
        $stmt->execute();
        if ($result = $stmt->get_result()) {
            return $result->fetch_all(MYSQLI_BOTH);
        }
        return null;
    }
    
    prepared_query($link, "UPDATE user SET email='[email protected]' WHERE email='[email protected]' LIMIT 1");
    echo "<br>";
    
    $result = prepared_query($link, "SELECT * FROM user");
    echo "welcome to database<br>";
    
    if ($result) {
        $row = $result[0];
        echo "my E-mail id is <strong> ".$row[1]. "</strong> and passoword is <strong>".$row[2]."</strong>";
    }
    



    1. SQLで文字列を大文字に変換する方法

    2. SQLServerデータベーススナップショット-2

    3. JavaScript/Node.jsでのSQLインジェクションの防止

    4. MariaDBバージョンを確認する6つの方法