好的,我想知道如何将这个mysql代码转换为mysqli。
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
我知道你将mysql更改为mysqli但它要求使用mysql的2个参数,所以我想在mysqli中看到它
我还没有找到有关新mysqli版本的问题的stackoverflow,所以我无法找到自己
答案 0 :(得分:2)
最好不要使用它!
mysql_real_escape_string()
是一种用于防止SQL注入的hack,甚至没有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();
答案 1 :(得分:0)
试试这样:
$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);
答案 2 :(得分:0)
这个功能不错。
不加区分地对所有传入数据使用strip_tags()
和addslashes()
会不必要地毁掉它,并增加零安全性。
要将数据提供给数据库,请仅使用字符串转义函数real_escape_string()
.
要在HTML页面上显示用户的数据,请删除标记然后或使用htmlspecialchars()
以避免任何脚本攻击。