您好我在使用PDO时遇到问题,我是新手。如果我使用第一种方法,查询将返回null数组:
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是一个ecrypted字符串,例如iGkGNI1NEzCZ6k9g9xC + m8hNm22G3DXsNoEqdwNkTc0 =
值来自网址
signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=
如果我直接用它的值替换预准备语句,查询将返回结果。
$r = "SELECT * FROM `order` WHERE `id` = '10' AND `key` = 'iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=' LIMIT 1";
有什么想法吗?对于您的信息,我使用Webmatrix作为IDE,在Windows 7 64位上使用PHP
答案 0 :(得分:2)
signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC+m8hNm22G3DXsNoEqdwNkTc0=
问题是这个。当读取key
的值时,+
被解释为空格。
要解决这个问题,在生成链接的页面上,您需要调用urlencode()
- 这将对字符进行正确编码,并且应该为您提供以下内容:
signin.php?id=10&key=iGkGNI1NEzCZ6k9g9xC%2Bm8hNm22G3DXsNoEqdwNkTc0=
在此页面中,您可以通过id
运行urldecode()
来获得正确的{{1}}值。
答案 1 :(得分:0)
您应该使用
PDO::PARAM_INT
而不是
PDO::PARAM_STR
对于您的ID,因为它是Int。
答案 2 :(得分:0)
感谢@andrewsi的想法。使用urlencode()发送加密的字符串,然后添加urldecode()以检索字符串。
注意:但是,+
符号仍无效。我用+
做了更多的数据,结果仍然为null,尽管编码/解码正常。