好的,我想知道你是如何将这段mysql代码转换成mysqli的。
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}我知道您将mysql更改为mysqli,但它要求提供两个参数,这对mysql有效,所以我希望在mysqli中看到它
此外,我还没有在stackoverflow上找到关于新mysqli版本的问题的人,所以我自己也找不到
发布于 2019-12-03 05:34:37
最好是根本不用它!
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();发布于 2014-01-05 06:52:34
试着这样做:
$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);发布于 2014-01-05 06:54:28
这个函数不是一个好主意。
在所有传入数据上不加区别地使用strip_tags()和addslashes()会对其造成不必要的破坏,安全性为零。
要将数据输入数据库,请仅使用字符串转义函数,real_escape_string().
htmlspecialchars()来避免任何脚本攻击。https://stackoverflow.com/questions/20927662
复制相似问题