如果UPDATE失败,我该如何处理INSERT

时间:2017-05-10 20:59:00

标签: php mysql

这段代码现在给我一些问题。出于某种原因,当你选中复选框进行提交时,它将跳过UPDATE并直接进入INSERT,当它应该只是UPDATE时创建另一个条目。

是否有更好的方法来处理这样的情况,如果不存在条目,您想要INSERT?

if(isset($_POST['R_domain'])){
    $_reseller="20217";
    $_DOMAIN=$_POST['R_domain'];
    $_COMPANY_NAME=$_POST['company_name'];
    $_COMPANY_EMAILS=$_POST['company_email'];
    $_PHONE_NUMBER=$_POST['phone_number'];
    $_ADDRESS=$_POST['street_address'];
    $_CITY=$_POST['city'];
    $_STATE=$_POST['state'];
    $_ZIPCODE=$_POST['zipcode'];
    if(isset($_POST['hmbill'])) {
        $_HMBill = "1";
    }
    else if(!isset($_POST['hmbill'])) {
        $_HMBill = "0";
    }
    $_DEPT="NA";

    $conn = mysqli_connect("", "", "", "");
    $_sql_update="UPDATE company SET DOMAIN='$_DOMAIN', COMPANY_NAME='$_COMPANY_NAME', COMPANY_EMAILS='$_COMPANY_EMAILS', PHONE_NUMBER='$_PHONE_NUMBER', ADDRESS='$_ADDRESS', CITY='$_CITY', ZIPCODE='$_ZIPCODE',STATE='$_STATE',DEPT='$_DEPT',HMBILL='$_HMBill' WHERE `DOMAIN` = '$_DOMAIN'";
    mysqli_query($conn, $_sql_update);
    if(mysqli_affected_rows($conn)>0){}
    else {
        $_sql_insert = "INSERT INTO `company` (ID,RID,DOMAIN,COMPANY_NAME,COMPANY_EMAILS,PHONE_NUMBER,ADDRESS,CITY,ZIPCODE,STATE,DEPT,HMBILL) VALUES('','$_reseller','$_DOMAIN','$_COMPANY_NAME','$_COMPANY_EMAILS','$_PHONE_NUMBER','$_ADDRESS','$_CITY','$_ZIPCODE','$_STATE','$_DEPT','$_HMBill')";
        mysqli_query($conn, $_sql_insert);
    }

2 个答案:

答案 0 :(得分:1)

我认为正在发生的事情是,您在更新查询后检查是否有任何行已更新。如果更新后列中的所有数据保持不变,则mysqli_affected_rows函数将返回0,从而将代码移动到插入查询。

您应该执行Select查询以检查记录是否存在WHERE DOMAIN = '$_DOMAIN'。如果是,请执行更新,否则执行插入操作。将您当前的if else修改为此。 例如:

答案 1 :(得分:1)

如果要在记录存在时更新信息,则可以在SQL中使用“ON DUPLICATE”关键字。这是一个例子:

 INSERT INTO
  `company`
(ID, RID, DOMAIN, COMPANY_NAME, COMPANY_EMAILS, PHONE_NUMBER, ADDRESS, CITY, ZIPCODE, STATE, DEPT, HMBILL)
VALUES(
  NULL,
  '$_reseller',
  '$_DOMAIN',
  '$_COMPANY_NAME',
  '$_COMPANY_EMAILS',
  '$_PHONE_NUMBER',
  '$_ADDRESS',
  '$_CITY',
  '$_ZIPCODE',
  '$_STATE',
  '$_DEPT',
  '$_HMBill'
)
ON DUPLICATE KEY UPDATE
`ADDRESS` = VALUES('$_ADDRESS'),
`CITY`    = VALUES(`$_CITY`),
`ZIPCODE` = VALUES(`$_ZIPCODE`)

如果此插入是重复的,则此SQL将更新地址,城市,邮政编码。您当然应该根据需要进行更改以适应SQL代码。

我希望这会有所帮助。