将Javascript对象发送到PDO以进行更新

时间:2017-01-23 20:11:11

标签: php arrays json object pdo

我是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循环,但是我想在我复杂化之前先让单个数组通过。任何帮助表示赞赏。谢谢!

1 个答案:

答案 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();
}