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严格标准:中只有变量应该通过引用传递"。

我认为不应该在绑定参数行中使用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