我是php&的新手真丢了。我正在尝试使用具有多个数组的javascript对象&将它发送到我的php PDO来更新我的数据库。我已将表单中的所有数据收集到一个javascript对象中。我使用json.stringify将对象转换为这种格式。 Console.log(updateString)生成:
[{"id":"20","type":"2","content":"3","name":"2","user":"1"},
{"id":"21","type":"2","content":"4","name":"3","user":"1"}]
我正在使用ajax发送到我的php:
$.ajax({
url: 'add.php',
data: {
updates: updateString
},
type: 'POST',
datatype: 'application/json',
success: function (response) {
console.log(response);
},
error: function (e) {
console.log(e);
}
});
然后在我的PHP代码中,我解码了json&我正在尝试更新我的数据库:
$db= new PDO ('mysql:dbname=xxxx;host=localhost', 'xxxx', 'xxxx');
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$updates = JSON_decode($_POST["updates"], true);
try {
$sql = ("UPDATE tableName SET type=:type, content=:content, name=:name, user=:user WHERE id=:id");
$stmt = $db->prepare($sql);
$stmt->bindParam(":id", $updates['id'], PDO::PARAM_STR);
$stmt->bindParam(":type", $updates['type'], PDO::PARAM_STR);
$stmt->bindParam(":content", $updates['content'], PDO::PARAM_STR);
$stmt->bindParam(":name", $updates['name'], PDO::PARAM_STR);
$stmt->bindParam(":user", $updates['user'], PDO::PARAM_STR);
$stmt->execute();
}
catch( PDOException $e ) {
echo "The changes could not be made.<br>".$e->getMessage();
}
我没有收到任何错误,所以我不知道从哪里开始,但我的数据库没有更新。我知道我需要在我的php中使用foreach循环,但是我想在我复杂化之前先让单个数组通过。任何帮助表示赞赏。谢谢!
答案 0 :(得分:1)
为了实现这一目标,你必须做出一点改变:
try{
for($i=0; $i<count($updates); $i++){
$sql = ("UPDATE tableName SET type=:type, content=:content, name=:name, user=:user WHERE id=:id");
$stmt = $db->prepare($sql);
$stmt->bindParam(":id", $updates[$i]['id'], PDO::PARAM_STR);
$stmt->bindParam(":type", $updates[$i]['type'], PDO::PARAM_STR);
$stmt->bindParam(":content", $updates['content'], PDO::PARAM_STR);
$stmt->bindParam(":name", $updates[$i]['name'], PDO::PARAM_STR);
$stmt->bindParam(":user", $updates[$i]['user'], PDO::PARAM_STR);
$stmt->execute();
}
}
catch( PDOException $e ) {
echo "The changes could not be made.<br>".$e->getMessage();
}
原因:
作为独立代码,如果您尝试运行以下代码,您将看到如何在PHP中接收JSON对象:
$test = '[{"id":"20","type":"2","content":"3","name":"2","user":"1"},
{"id":"21","type":"2","content":"4","name":"3","user":"1"}]';
$test_array = json_decode($test, true);
for($i=0; $i<count($test_array); $i++){
echo "<br> Id = ".$test_array[$i]['id']." | ".$test_array[$i]['content'];
}
产生的输出如下:
Id = 20 | 3
Id = 21 | 4
foreach
版本为:
try{
$sql = ("UPDATE tableName SET type=:type, content=:content, name=:name, user=:user WHERE id=:id");
$stmt = $db->prepare($sql);
$stmt->bindParam(":id", $id, PDO::PARAM_STR);
$stmt->bindParam(":type", $type, PDO::PARAM_STR);
$stmt->bindParam(":content", $content, PDO::PARAM_STR);
$stmt->bindParam(":name", $name, PDO::PARAM_STR);
$stmt->bindParam(":user", $user, PDO::PARAM_STR);
foreach($updates as $update_rec){
$id = $update_rec['id'];
$type = $update_rec['type'];
$content = $update_rec['content'];
$name = $update_rec['name'];
$user = $update_rec['user'];
$stmt->execute();
}
}
catch( PDOException $e ) {
echo "The changes could not be made.<br>".$e->getMessage();
}