如果行不存在则插入

时间:2010-11-17 12:22:58

标签: php mysql insert

好的,首先我知道我还没有检查用户输入,但代码有点乱,但它目前正在测试中,所以它不是一个实时系统。

我在一个页面上有一个表,我正在使用jQuery遍历每一行并将值作为数组发送到php页面,该页面遍历每一行并更新mysql db中的相关行。只要您只想编辑您所拥有的内容,这就太棒了。如果用户向表中添加了另一行,它仍会发送所有行,但如果找不到要更新的相关行,我需要插入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); 
              }
            }

“index”是第一页上表格的行索引,如果这有帮助吗?

3 个答案:

答案 0 :(得分:4)

首先,该查询难以置信不安全。您应该使用mysql_real_escape_string

其次,您可以测试索引属性是否存在,但这会使您面临不良用户数据的风险(始终假设用户数据可能混乱)。如果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

答案 1 :(得分:3)

只需创建一个IF语句来检查$ data ['index']是否存在。如果没有,则创建一个insert语句而不是更新。

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); 
          }
        }

答案 2 :(得分:1)

由于我们正在处理mysql,因此REPLACE可能在这里使用。 http://dev.mysql.com/doc/refman/5.0/en/replace.html