繁体   English   中英

如果行不存在则插入

[英]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属性是否存在,但这会使您面临不良用户数据的风险(始终假设用户数据可能被弄乱了)。 如果rowidorderid在表上形成一个唯一键,那么最好做的是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM