2015-11-24 2 views
0

Я использую Laravel 5 и пытаюсь вставить электронное письмо с знаком + в поле строки в базе данных.pdo замена + пробелом

К сожалению, + получает декодированное место в базе данных. Я проследил код и определил его как pdo, который меняет значение на пробел.

код выглядит следующим образом:

$bindings = $me->prepareBindings($bindings); 
return $me->getPdo()->prepare($query)->execute($bindings); 

Если я напечатать $bindings массив между двумя утверждениями электронной почты является: email => [email protected]. Однако, когда я проверяю db, он говорит: email [email protected].

Мой широкий вопрос: как я могу избежать этого с помощью Laravel? Или более конкретно, как я могу избежать использования pdo?

+0

У вас есть 3 вызовов функций в этой последней строке; вы пытались разбить их, чтобы увидеть, какая функция выполняет экранирование? – miken32

+0

@ miken32 Да, 'execute' - это единственный оператор, который знает о' bindings'. Он находится в выполнении, который связывает значения с заполнителями в запросе. – ajon

+1

Откуда берется адрес электронной почты? Если это параметр запроса ('$ _GET'), он должен быть закодирован в URL, то есть' http: //example.com/? Email = email% 2Btest @ email.com' – Phil

ответ

0

Я был неправ. PDO не дезинфицирует его. Передняя часть санировала его, так что это не имеет никакого отношения к Laravel или PDO. Это jquery, что означает, что я просто потратил впустую час, потому что я не принимал этот 1 дополнительный шаг при отладке. Урок выучен.

В передней части я использую этот АЯКС вызов:

$.ajax({ 
     url: "/customers/"+$("#Id").val(), 
     data:data, 
     type: "PUT", 
     success: function(html) { 
      ... 
     }, 
     error: function(response){ 
      ... 
     } 
    });