どちらでもない!
最初の例では、数年前に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>";
}