php 准备语句插入 trim 或 date() 等 php 严格标准错误

php prepared statement inserting with trim or date() etc. php strict standards error

希望这是一个非常简单的问题,但我一直没能找到答案。我正在学习使用准备好的语句而不是 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 passed 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']); 安全吗?

非常感谢。

当你做类似trim($x)的事情时,出来的不是变量,而是对值的引用。 bind_param 方法需要获得一个变量才能工作。因此,这意味着您需要在 将其传递给该函数之前 进行格式化和其他调用。所以是的,你的想法是正确的。

例如,这是正确的做法:

$date = date('Y-m-d');
$stmt->bind_param("s", $date);

我建议您阅读参考资料以更好地理解:http://php.net/manual/en/language.references.php