作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行以下语句:
$statement = $database->prepare("SELECT userID FROM user_sessions WHERE sessionID = ?");
$statement->execute(array($sessionID));
但是,它们无法返回用户 ID($statement->rowCount() 返回 0)。如果我像这样修改语句,它可以工作但容易受到 SQL 注入(inject)攻击。
$statement = $database->prepare("SELECT userID FROM user_sessions WHERE sessionID = '$sessionID'");
$statement->execute();
sessionID 是从 PHP password_hash() 函数生成的哈希值,通过 PHP $_GET 获得。
为什么前两个语句不起作用,我该如何更正它们?
更新:这是我到目前为止发现的:
print_r($sessionID) 输出
$2y$10$YW2.87KPO2FqFxZD9jjH7ulmPXR2Mdy7Q2c\/RXjSJjH2yt.Q37aQS
var_export($sessionID) 输出
'$2y$10$YW2.87KPO2FqFxZD9jjH7ulmPXR2Mdy7Q2c\\/RXjSJjH2yt.Q37aQS'
原来的$sessionID(数据库中的值)是
$2y$10$YW2.87KPO2FqFxZD9jjH7ulmPXR2Mdy7Q2c/RXjSJjH2yt.Q37aQS
最佳答案
我已经解决了这个问题。我用来对我的 sessionID 进行 URL 编码的函数会自动在任何正斜杠之前添加一个反斜杠。因此,参数化 PDO 语句失败。不知何故,非参数化语句处理了反斜杠(因此它仅转义了正斜杠的含义)并且 sessionID 现在变得与原始 sessionID 相同。
关于php - PDO SELECT WHERE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36102601/
我是一名优秀的程序员,十分优秀!