目前我有一些数据库包装函数,如下所示:
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);
}
这背后的想法之一是,当我从 mysql 切换到 mysqli 时,只需几分钟即可更新我的包装函数,而且我不必替换数百个实例mysql_real_escape_string()
,mysql_query()
并且mysql_fetch_array()
跨数百个不同的项目。
唯一的问题是上面可以很容易地转换为标准的过程 mysqli 函数,但不是准备好的语句。
这有关系吗?似乎每个教程都说准备好的语句对安全性和性能很重要,但是目前:
- 我的项目都没有性能问题。
- 我非常讨厌将用户输入转换为预期的类型(字符串、整数、浮点数等),并且还手动转义查询中任何地方使用的任何用户输入。
考虑到这一点,是否真的有必要为过去或未来的项目切换到准备好的陈述?