【问题标题】:PHP PDO loop different in JS and PHPJS和PHP中的PHP PDO循环不同
【发布时间】:2016-07-29 13:20:30
【问题描述】:

我正在尝试创建一个循环以将所有 POST 键添加到 PDO 绑定参数。 当我用 JS 发出 POST 请求时,它可以工作,但是如果我用 php 完成它,我发现这并不奇怪,这里有一个例子。

这个JS

 var dataString="Name="+encodeURIComponent($("#name ."+Name[i]+"").val())+"&Email="+encodeURIComponent($("#email ."+Name[i]+"").val());
$.ajax({
    type: "POST",
    url: "sendback.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
     }
    });

PHP 后端。

   foreach($_POST as $key => $value) {
    $Value=trim(urldecode($value));
       $stmt -> bindParam(':'.$key.'',$Value);
    }

结果

---------------------------
Name          |        Email 
AAA           |email@exa.com
----------------------------

这可以正常工作并将数据正确存储在数据库中

然而

这个不要

$_POST['Name']="AAA";
$_POST['Email']="email@exa.com";
foreach($_POST as $key => $value) {
$Value=trim(urldecode($value));
$stmt -> bindParam(':'.$key.'',$Value);
}
$stmt -> execute();

结果

---------------------------
Name          |        Email 
email@exa.com |email@exa.com
----------------------------

它将最后一个 $_post 键的值存储在所有数据库列中。 所以这个例子中数据库的所有输入都是“email@exa.com” 搜索后我发现要使前面的示例有效,我需要在循环中的“$value”之前添加一个“&”,这让我想知道为什么它与 Ajax 请求不同,我的意思是它们都是 POST 请求,对吧?

【问题讨论】:

  • var dataString={name1: val1, name2: val2,........}
  • 在什么情况下不起作用??
  • 在最后一个示例中,当我尝试使用 PHP 自己制作 $POST 而不是 Ajax 请求时
  • 是的,但是在什么情况下它不起作用?
  • 哦,对不起,我没有提到结果。

标签: javascript php ajax pdo


【解决方案1】:

PDO 文档未能解释的是 bindParam() 被传递给 PDO byref - 而 bindValue() 不是。

在这种情况下最好使用bindValue()bindParam() 的目的是执行一个查询,然后更改变量并重新执行,而无需再次绑定参数。 bindValue() 立即绑定,bindParam() 仅在执行时绑定

&$value 是对$value 的引用,而不是它的值

【讨论】:

  • 与他自己的代码相比,这并没有改变任何东西。除此之外,它会使他的文件崩溃,因为您的代码中有两个错误。邮件前的引号太多,结尾的逗号太多。
猜你喜欢
  • 2015-03-14
  • 2012-10-09
  • 2015-10-29
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
相关资源
最近更新 更多