Php pdo更换+;有空间

Php pdo更换+;有空间,php,pdo,laravel-5,Php,Pdo,Laravel 5,我正在使用Laravel 5,并试图将带有+符号的电子邮件插入数据库的字符串字段中 不幸的是,+正在被解码到数据库中的某个空间。我跟踪了代码并确定它是将值更改为空格的pdo 代码如下所示: $bindings = $me->prepareBindings($bindings); return $me->getPdo()->prepare($query)->execute($bindings); 如果我在两条语句之间打印$bindings数组,则电子邮件为:email=>

我正在使用Laravel 5,并试图将带有
+
符号的电子邮件插入数据库的字符串字段中

不幸的是,
+
正在被解码到数据库中的某个空间。我跟踪了代码并确定它是将值更改为空格的pdo

代码如下所示:

$bindings = $me->prepareBindings($bindings);
return $me->getPdo()->prepare($query)->execute($bindings);
如果我在两条语句之间打印
$bindings
数组,则电子邮件为:
email=>email+test@email.com
。但是,当我检查数据库时,它会显示:
电子邮件test@email.com


我的主要问题是,我怎样才能避免拉威尔的这种情况?或者更具体地说,如何使用pdo避免它?

尝试通过在+符号前面添加反斜杠来转义+符号

email\+test@email.com

我错了。PDO并没有对它进行消毒。前端正在对其进行消毒,因此与Laravel或PDO无关。这是jquery,这意味着我浪费了一个小时,因为我在调试时没有采取额外的步骤。吸取的教训

在前端,我使用以下ajax调用:

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

最后一行有3个函数调用;您是否尝试过将它们拆分以查看哪个函数进行转义?@miken32是的,
execute
是唯一了解
绑定的语句。将值绑定到查询中的占位符的是execute。电子邮件地址来自哪里?如果它是一个查询参数(
$\u GET
),它应该是URL编码的,即
http://example.com/?email=email%2Btest@email.com
您追踪的代码在哪里?请将用于将数据保存到数据库的代码张贴出来。我刚刚尝试通过使用Laravel的查询生成器和雄辩的模型保存电子邮件地址来复制您的问题,这两种方法都没有问题。您使用哪个客户端来查看保存的数据?:(我刚刚发现问题不在生成器或PDO中。我发现错误发生在前端。@Bogdan我从前端测试了它,但它没有正确地进入数据库,因此我绕过前端,开始使用dd()跟踪请求)。因此,查询从未发送到db。如果我让它离开db,我会看到前端对其进行过滤。我通过put或post请求将其作为json发送。