簡體   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