完全迷失了mysqli_real_escape_string

时间:2013-07-05 15:06:27

标签: php mysql string object escaping

我看到很多人遇到同样的问题,但没有一个解决方案是相关的/他们没有用。

首先,这是我简化的简单代码:

<?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在函数的第一行,仍然没有..

1 个答案:

答案 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");
?>