希望这是一个非常简单的问题,但我一直没能找到答案。我正在学习使用准备好的语句,而不是mysqli_escape。我有代码:
$stmt = $dbc->prepare("SELECT something FROM the_table WHERE email=? ");
$stmt->bind_param("s", strtolower(trim($_REQUEST['email'])));
我得到了错误消息"PHP严格标准:中只有变量应该通过引用传递"。
我认为不应该在绑定参数行中使用strtolower/trim等,这是正确的吗?这重要吗?首先拥有一个单独的是否不那么安全
$email = strtolower(trim($_REQUEST['email'])));
我有点想我应该尝试将$_POST、$_REQUEST位实际保留在bind_param行中。
我在另一个页面上也遇到了同样的问题:
$stmt->bind_param("s", date("Y-m-d") );
最后和分别,直接使用插入$_SESSION
变量是否安全?这些都是以前设置的,但它们会被黑客入侵吗?如果我之前设置了$_SESSION['admin']="off"
,然后在admin=?
的查询中使用它,其中bind_param
说("s", $_SESSION['admin']);
安全吗?
非常感谢。
当您执行类似trim($x)
的操作时,结果不是变量,而是对值的引用。bind_param
方法希望获得一个变量使其工作。因此,这意味着在将其传递给该函数之前,您需要执行格式化和其他调用。所以,是的,你的想法是正确的。
例如,这是正确的方法:
$date = date('Y-m-d');
$stmt->bind_param("s", $date);
我建议您阅读参考资料以更好地理解:http://php.net/manual/en/language.references.php