我清理了一些旧的项目代码,特别是数据库通信部分。我注意到,只要代码需要与包含用户输入的数据库通信,代码就像:
$user_input = $mysqli->real_escape_string($user_input);
$mysqli->query("INSERT INTO foo (bar) VALUES ('$user_input')");
换句话说,只要查询包含用户输入的数据以防止SQL注入,它就会在整个地方使用real_escape_string
。
我最初要将所有这些real_escape_string
调用替换为预准备语句和参数化查询,但很可能原因是前一个开发人员使用real_escape_string
而不是预处理语句。
那么,是否会出现real_escape_string
优于预备语句的情况?性能怎么样?