Php 虽然正确地传递了POST变量,但使用Ajax时PDO更新失败
单独运行时,表单提交和数据库更新按需要执行。当使用ajax时,它会提交正确的POST变量,但我不知道如何修复PDO异常,因为它在不生成ajax POST时工作正常PDO和Ajax都是新功能。Php 虽然正确地传递了POST变量,但使用Ajax时PDO更新失败,php,ajax,pdo,Php,Ajax,Pdo,单独运行时,表单提交和数据库更新按需要执行。当使用ajax时,它会提交正确的POST变量,但我不知道如何修复PDO异常,因为它在不生成ajax POST时工作正常PDO和Ajax都是新功能。 <form id="privacy" action="privacy.php" method="post"> <input type="hidden" name="id" class="id" value="<?php echo $user->id; ?
<form id="privacy" action="privacy.php" method="post">
<input type="hidden" name="id" class="id" value="<?php echo $user->id; ?>">
<label>
<input type="radio" name="name" class="name" value="private" />
<img src="img/lock.png">
</label>
<label>
<input type="radio" name="name" class="name" value="friends"/>
<img src="img/friends.png">
</label>
<label>
<input type="radio" name="name" class="name" value="fof"/>
<img src="img/friends-of-friends.png">
</label>
</form>
<script>
$(function() {
$("#privacy").change(function() {
var name = $(".name:checked").val();
var id = $(".id").val();
$.ajax({
type: "POST",
url: "privacy.php",
data: {"name":name, "id":id},
success: function() {
alert("form submitted: "+ id +" name:" + name);
}
});
});
});
</script>
致命错误:未捕获PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解在C:\xampp2\htdocs\platform\library\library.php:151中第1行“id=”1”附近使用的正确语法
堆栈跟踪:
0 C:\xampp2\htdocs\platform\library\library.php(151):PDO->prepare('updateuser_pri…'))
1 C:\xampp2\htdocs\platform\privacy.php(24):DemoLib->privacy('1','private',NULL)
2{main}
在第151行的C:\xampp2\htdocs\platform\library\library.php中抛出
那么,如果在添加ajax post submit之前正确更新了错误,我怎么会在那里出错呢。我可以看到ajax正在传递post数据('1','private',NULll)。真糊涂 所以经过几天的研究,我终于找到了答案。仍然不知道问题是什么,但这是现在的工作代码。如前所述,除了“id”字段外,始终只有一个其他字段,但另一个字段是动态的。。。随着我进一步发展技能,我肯定会进一步修改它,以清理它并正确地构建它
$(function() {
$("#privacy").change(function() {
var uname = $(".name:checked").val();
var uid = $(".id").val();
$.ajax({
type: "POST",
url: "privacy.php",
data: {"name":uname, "uid":uid},
success: function() {
}
});
});
});
还有处理
$uid = $_POST['uid'];
$sql = "UPDATE user_privacy";
$data = array_filter($_POST);
foreach ($data as $key => $value) {
if($key != 'uid'){
$field = $key;
$fieldValue = $value;
$sql .= ' SET '. $key.' = :'.$key;
}
}
$sql .= ' WHERE parentid = :uid';
$query = $db->prepare($sql);
$query->bindParam(':uid', $uid, PDO::PARAM_STR);
$query->bindParam(':'.$field, $fieldValue, PDO::PARAM_STR);
$query->execute();
行
$query->bindParam(':'.$key,$value,PDO::PARAM_STR)不应该出现吗
是否在foreach中?每次通过foreach
循环都要添加SET
和WHERE
。开始时应该只有一个集合
,结尾处应该有一个集合,每个赋值之间应该有逗号。试着打印$sql
,你会发现它有多错。循环完成后,你还使用了$key
和$value
。您需要在循环中使用bindValue()
。@S.Dev除了post['id']之外,总是只有一个post变量。。。单选按钮。;)
$uid = $_POST['uid'];
$sql = "UPDATE user_privacy";
$data = array_filter($_POST);
foreach ($data as $key => $value) {
if($key != 'uid'){
$field = $key;
$fieldValue = $value;
$sql .= ' SET '. $key.' = :'.$key;
}
}
$sql .= ' WHERE parentid = :uid';
$query = $db->prepare($sql);
$query->bindParam(':uid', $uid, PDO::PARAM_STR);
$query->bindParam(':'.$field, $fieldValue, PDO::PARAM_STR);
$query->execute();