2013-08-21 6 views
1

Привет У меня проблема при использовании PDO, я новичок в этом. Запрос возврата пустого массива, если я с помощью первого метода:PHP PDO query return 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__)); 
} 

где $ идентификатора целого и $ ключа является ecrypted строки, например iGkGNI1NEzCZ6k9g9xC + m8hNm22G3DXsNoEqdwNkTc0 =

значение поступает из URL

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

Если я непосредственно заменил подготовленный оператор его значением, запрос вернет результат.

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

Есть идеи? Для вашей информации я использую WebMatrix, как IDE с PHP на Windows 7 64-битной

+0

Не могли бы вы 'var_dump ($ key)'? С '+' и '=' в тексте, он может быть преобразован для вас где-то на этом пути. – andrewsi

+0

return string (44) "iGkGNI1NEzCZ6k9g9xC m8hNm22G3DXsNoEqdwNkTc0 =" Когда я использую die (var_export ($ db-> errorinfo(), TRUE)); он возвращает массив (0 => '00000', 1 => NULL, 2 => NULL,) –

+2

Да, это редактируется - см. Это пространство посередине, где ваш '+' был? Вам нужно запустить код через 'urlencode()' на странице, где вы создаете ссылку; и 'urldecode()' на этой странице: http://php.net/manual/en/function.urlencode.php – andrewsi

ответ

0

Вы, вероятно, следует с помощью

PDO::PARAM_INT 

Вместо

PDO::PARAM_STR 

Для Вашего ID, так что это Int ,

+0

Ничего не меняется. Я пробовал это заранее. –

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

Проблема в этом. Когда считывается значение key, то + интерпретируется как пробел.

Чтобы обойти это, на странице, которая генерирует ссылку, вам нужно позвонить urlencode() - что будет кодировать символы должным образом, и должно дать вам что-то вроде:

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

В это страницы, вы можете получить правильное значение id, запустив его через urldecode().

0

Благодаря @andrewsi для размышлений. Отправьте зашифрованную строку с помощью urlencode(), затем добавьте urldecode() для извлечения строки.

Примечание: + символ все еще не работает. Я сделал несколько данных с +, и результат все еще имеет значение null, хотя кодирование/декодирование работает.