1

嗨,我在使用 PDO 时遇到问题,我是新手。如果我使用第一种方法,则查询返回空数组:

try {
    $r = "SELECT * FROM `order` WHERE `id` = :id AND `key` = :key LIMIT 1";
    $r_do = $db->prepare($r);
    $r_do->bindParam(':id', $id, PDO::PARAM_STR);
    $r_do->bindParam(':key', $key, PDO::PARAM_STR);
    $r_do->execute();
    $f2 = $r_do->fetch();
} catch(PDOException $r) {
  $log->logError($r." - ".basename(__FILE__));
}

其中 $id 是整数,$key 是加密字符串,例如 iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=

该值来自一个 URL

signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=

如果我直接用它的值替换准备好的语句,查询将返回结果。

$r = "SELECT * FROM `order` WHERE `id` = '10' AND `key` = 'iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=' LIMIT 1";

任何想法?为了您的信息,我在 Windows 7 64 位上使用 Webmatrix 作为带有 PHP 的 IDE

4

3 回答 3

2
signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=

问题是这样的。当key读取 的值时,它+被解释为一个空格。

为了解决这个问题,在生成链接的页面上,您需要调用urlencode()- 这将正确编码字符,并且应该为您提供如下内容:

signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC%2Bm8hNm22G3DXsNoEqdwNkTc0=

这个id页面中,你可以通过运行它来获得正确的值urldecode()

于 2013-08-21T15:40:51.157 回答
0

您可能应该使用

PDO::PARAM_INT

代替

PDO::PARAM_STR

对于您的 ID,因为它是一个 Int。

于 2013-08-21T15:30:00.567 回答
0

感谢@andrewsi 的想法。使用 urlencode() 发送加密字符串,然后添加 urldecode() 以检索字符串。

注意:但是,+符号仍然不起作用。尽管编码/解码工作正常,但我已经制作了更多数据,+结果仍然为空。

于 2013-08-21T15:48:55.517 回答