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