好的,我想知道你如何将这个mysql代码转换为mysqli。
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
我知道您将 mysql 更改为 mysqli,但它要求 2 个参数,这与 mysql 一起使用,所以我想在 mysqli 中看到它
我也还没有在stackoverflow上找到有人对新的mysqli版本有疑问,所以我无法找到自己
最好不要使用它!
mysql_real_escape_string()
是一个用来防止SQL注入的黑客,它甚至没有做到100%。此功能从来都不是为了保护任何东西。这是一个简单的字符串格式化函数。
mysqli_real_escape_string()
是使过渡更容易的另一种黑客。虽然,在撰写这篇文章时,mysql_*
已经被弃用了很长时间,没有人应该有任何借口使用某种填充程序进行转换,因为每个人都应该已经在使用MySQLi和准备好的语句甚至更好的PDO。
至于strip_tags()
和addslashes()
它们在这种情况下毫无用处,只会破坏您的数据。不要使用它们。
为了防止 SQL 注入,应该使用预准备语句并确保没有变量输入直接插入到 SQL 中。
例如:
$stmt = $mysqli->prepare('SELECT columnA FROM tableB WHERE columnC=?');
$stmt->bind_param('s', $someVariable);
$stmt->execute();
$result = $stmt->get_result();
这个函数是个坏主意。
对所有传入的数据不分青红皂白地使用strip_tags()
和addslashes()
会不必要地破坏它,而不会增加安全性。
若要将数据馈送到数据库中,请仅使用字符串转义函数
real_escape_string()
。要在 HTML 页面上显示用户的数据,请去除标记或使用
htmlspecialchars()
以避免任何脚本攻击。
尝试如下:
$mysqli = new mysqli("host", "username", "pword", "db");
function protect($string) {
return $mysqli->real_escape_string(strip_tags(addslashes($string)));
}
编辑
$link = mysqli_connect("localhost", "root", "", "aaa");
$city = "'s Hertogenbosch";
$city = mysqli_real_escape_string($link, $city);
echo($city);