我有一个用户可修改的表,从技术上讲,在一个会话中,用户可以检索以前保存的会话并插入新行、更新行和删除行。
当前,在保存时,我删除了前一个会话的所有行,并简单地使用INSERT重新添加所有行(参见下面的代码)。
虽然这是有效的,但它似乎是错误的。我认为我应该使用INSERT、UPDATE和DELETE的组合来正确地做到这一点?最好的方法是什么?它是否可以通过一个Ajax POST完成,如果可以,那么我是否需要根据INSERT、UPDATE、DELETE的需要执行三个单独的查询?当然,这意味着要在整个会话中跟踪每一行的状态。我希望有一个简单的(推荐的)方法来做到这一点。谢谢你提供的任何指示。
$sql_delete = "DELETE FROM worksheet_1_1b WHERE user_id = '$user_id'";
$result = mysqli_query($dbc, $sql_delete);
$sql_insert = "INSERT INTO worksheet_1_1b (user_id, key_position, area, ro, span, criteria1, criteria2, criteria3, urgency) VALUES ('$user_id','$key_position','$area','$ro','$span','$criteria1','$criteria2','$criteria3','$urgency' )";
$result = mysqli_query($dbc, $sql_update);
随便说说:我认为这是一个利用双向绑定(想到Angular)来保持DB与UI同步的架构的坚实案例。
但是,如果您决定通过AJAX调用来运行它,那么您可以相当容易地将所有CRUD请求包装到单个data
对象中,然后从那里解析它(在从$_POST
检索之后),确保转义您的值并将它们插入参数化查询中,以改善基于SQL注入的攻击向量。
像
这样的数据结构{data=
{
create={
/*some data in whatever format*/
},
update={
/*some data in whatever format*/
},
delete={
/*some data in whatever format*/
}
}
}
例如,就是一个选项。