繁体   English   中英

PHP PDO查询返回null

[英]PHP PDO query return null

嗨,我在使用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作为IDE与PHP

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

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

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

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

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

您可能应该使用

PDO::PARAM_INT

代替

PDO::PARAM_STR

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

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

注意:但是, +符号仍然不起作用。 我用+做了更多的数据,即使编码/解码有效,结果仍然为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM