我看到很多人遇到同样的问题,但没有一个解决方案是相关的/他们没有用。
首先,这是我简化的简单代码:
<?php
$mysqli = new mysqli("localhost", "root", "", "pembsweb");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
function mysqli_secure($string) {
$string = htmlspecialchars($string);
$string = trim($string);
if (get_magic_quotes_gpc()) {
$string = stripslashes($string);
}
$string = $mysqli->real_escape_string($string);
return $string;
}
echo mysqli_secure("lets\\test//this");
?>
这会导致错误:
致命错误:在第13行的非对象上调用成员函数real_escape_string()
我现在感到非常愚蠢和烦恼..任何人都可以帮助我吗?
编辑:我已经尝试从函数中删除所有其他行,所以它所做的只是mysqli真正的转义,但仍然没有...我也尝试通过{{1}定义$ string在函数的第一行,仍然没有..
答案 0 :(得分:2)
$mysqli
在其他范围内定义,而不是您尝试使用它。
把它作为论据传递。
<?php
$mysqli = new mysqli("localhost", "root", "", "pembsweb");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
function mysqli_secure($mysqli, $string) {
$string = htmlspecialchars($string);
$string = trim($string);
if (get_magic_quotes_gpc()) {
$string = stripslashes($string);
}
$string = $mysqli->real_escape_string($string);
return $string;
}
echo mysqli_secure($mysqli, "lets\\test//this");
?>