gpt4 book ai didi

php - PDO SELECT WHERE 不起作用

转载 作者:行者123 更新时间:2023-11-29 06:15:31 27 4
gpt4 key购买 nike

我正在尝试执行以下语句:

$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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com