我正在尝试创建一个循环以将所有 POST 键添加到 PDO 绑定(bind)参数。 当我用 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 请求,对吗?
最佳答案
PDO 文档未能解释的是 bindParam()
通过引用传递给 PDO - 而 bindValue()
则不然。
在这种情况下最好使用bindValue()
。 bindParam()
旨在执行查询,然后更改变量并重新执行,而无需再次绑定(bind)参数。 bindValue()
立即绑定(bind),bindParam()
仅在执行时
&$value
是对 $value
的引用,而不是它的值
关于javascript - PHP PDO 循环在 JS 和 PHP 中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36496867/