【发布时间】:2023-04-05 06:37:02
【问题描述】:
我见过很多人遇到同样的问题,但没有一个解决方案是相关的/它们不起作用。
首先,这是我的简单代码,让事情变得简单:
<?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 真正的转义,但仍然没有。我还尝试通过 $string = new stdClass(); 定义 $string函数的第一行,还是什么都没有..
【问题讨论】:
-
这是范围问题;您的
$mysqli对象不在您的函数范围内。 -
怎么不在范围内? :/ 它保持打开状态,当然我不需要在每个使用它的资源的函数中重新定义 mysqli 连接?
-
否,但您需要将其传递给函数。解决这个问题的更好方法是使用一个类,其中每个函数都可以使用连接作为对象属性。
-
我明白了,谢谢!我会考虑改变我的方法!
-
@Chuckun - 你在 mysqli connection (正如你所说的在函数中是开放的并且可用的)和
$mysqliobject 之间感到困惑 您已声明使用该连接。
标签: php mysql string object escaping