【发布时间】:2016-01-06 00:34:25
【问题描述】:
希望是一个非常简单的问题,但我一直无法找到答案。我正在学习使用准备好的语句而不是 mysqli_escape。我有代码:
$stmt = $dbc->prepare("SELECT something FROM the_table WHERE email=? ");
$stmt->bind_param("s", strtolower(trim($_REQUEST['email'])));
我收到错误消息“PHP Strict Standards: Only variables should be pass by reference in”。
我认为您不应该在绑定参数行中使用 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']); 安全吗?
非常感谢。
【问题讨论】:
标签: php session prepared-statement mysql-real-escape-string