[英]Insert if row doesn't exist
好的,首先我知道我没有检查用户输入,并且代码有些混乱,但是目前正在测试中,因此它不是实时系统。
我在一页上有一张表,我正在使用jQuery遍历每一行并将值作为数组发送到php页面,该页面遍历每一行并更新mysql数据库中的相关行。 只要您只想编辑已有的内容,就可以了。 如果用户在表中添加另一行,它仍然会发送所有行,但是如果找不到相关行进行更新,我需要php插入,这有意义吗?
这是我的PHP更新代码,因为它是:
if (isset($_POST['data']) && is_array($_POST['data'])) {
foreach ($_POST['data'] as $row => $data) {
$sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
$result = mysql_query($sql);
}
}
“索引”是首页上表格的行索引吗?
首先,该查询非常不安全。 您应该使用mysql_real_escape_string
。
其次,您可以测试index属性是否存在,但这会使您面临不良用户数据的风险(始终假设用户数据可能被弄乱了)。 如果rowid
和orderid
在表上形成一个唯一键,那么最好做的是使用ON DUPLICATE KEY UPDATE
:
$sql = 'INSERT INTO `orders` VALUES (' . mysql_real_escape_string( $data['supp_short_code'] ) /* ... */ ' ON DUPLICATE KEY UPDATE ' // your original sql
只需创建一个IF语句来检查$ data ['index']是否存在。 如果不是,则创建一个插入语句而不是更新。
if (isset($_POST['data']) && is_array($_POST['data'])) {
foreach ($_POST['data'] as $row => $data) {
if($data['index']){
$sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
} else {
$sql = /*Create INSERT statement*/;
}
$result = mysql_query($sql);
}
}
由于我们正在处理mysql,因此REPLACE可能在这里有用。 http://dev.mysql.com/doc/refman/5.0/en/replace.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.