我正面临使用mysqli与mysql的现实。我有以下功能来清理数据
这是代码使用mysql的方式
function sanitize($data){
return htmlentities(strip_tags(mysql_real_escape_string($data)));
}
使用 mysql
时出现错误消息 Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in...
在阅读http://us3.php.net/mysqli_real_escape_string上的php手册参考后,并在下面进行了更改...
function sanitize($data){
return htmlentities(strip_tags(mysqli_real_escape_string($data, '0')));
}
...使用 mysqli
后,我收到以下错误消息 Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in....
这现在阻止我登录。非常感谢任何帮助!
答案 0 :(得分:4)
Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli
非常自我解释......
您需要提供mysqli
实例作为第一个参数,并将字符串作为第二个参数。
E.g。
mysqli_real_escape_string($mysqli_conn, $data)
答案 1 :(得分:1)
来自manual:
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
为什么需要数据库连接来转义字符串?!
字符串转义函数需要知道您的数据库连接用于正确转义字符串的编码。所以你必须将连接传递给函数。
函数mysqli_real_escape_string($mysqli, $str)
中包含类似的内容:
$encoding = $mysqli->getConnectionEncoding();
这就是你必须传递连接的原因。
这种现代软件设计模式(通过构造函数或作为函数的参数传递类中需要的东西)称为依赖注入(短 DI模式)。
更好的方法是使用OOP样式:
$con = new mysqli();
$escapedString = $con->real_escape_string($string);