現時点では、次のようなデータベースラッパー関数がいくつかあります。
function db_escape($str) {
return mysql_real_escape_string($str);
}
function db_query($sql) {
global $LINKID;
return mysql_query ($sql, $LINKID);
}
function db_fetch_array($result) {
return mysql_fetch_array ($result, MYSQL_ASSOC);
}
私のコードでは、次のようなことができます。
$result = db_query('SELECT userid, first_name, last_name FROM user
WHERE email = "' . db_escape($email) . '"');
if ($result) {
$user = db_fetch_array($result);
}
この背後にあるアイデアの 1 つは、mysql から mysqli に切り替えると、ラッパー関数を更新するのに数分しかかからず、何mysql_real_escape_string()
百mysql_query()
ものmysql_fetch_array()
.
これに関する唯一の問題は、上記が標準の手続き型 mysqli 関数に十分に簡単に変換できるが、準備済みステートメントには変換できないことです。
これは問題ですか?すべてのチュートリアルでは、準備されたステートメントはセキュリティとパフォーマンスにとって重要であると述べているようですが、現時点では:
- 私のプロジェクトにはパフォーマンスの問題はありません。
- ユーザー入力を予想される型 (string、integer、float など) にキャストすること、およびクエリ内の任意の場所で使用されるユーザー入力を手動でエスケープすることについて、私は非常に神経質です。
これを念頭に置いて、過去または将来のプロジェクトのいずれかで、準備済みステートメントに切り替えることが本当に必要ですか?