PDO SELECT WHERE无法正常工作

时间:2016-03-19 13:53:16

标签: php mysql sql select pdo

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

$statement = $database->prepare("SELECT userID FROM user_sessions WHERE sessionID = ?");
$statement->execute(array($sessionID));

但是,它们无法返回userID($ statement-&gt; rowCount()返回0)。如果我修改这样的语句,它可以工作,但是容易受到SQL注入的攻击。<​​/ p>

$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

1 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。我用来对我的sessionID进行URL编码的函数在任何正斜杠之前自动添加了一个反斜杠。因此,参数化PDO语句失败。不知何故,非参数化语句处理反斜杠(因此它只转义正斜杠的含义),sessionID现在变得与原始sessionID相同。