Php 如果更新失败,我应该如何处理INSERT

Php 如果更新失败,我应该如何处理INSERT,php,mysql,Php,Mysql,这段代码现在给了我一些问题。由于某些原因,当您选中复选框进行提交时,它将跳过更新并直接进入插入创建另一个条目,而此时它应该只是更新 有没有更好的方法来处理这样的场景:如果条目不存在,您希望插入 if(isset($_POST['R_domain'])){ $_reseller="20217"; $_DOMAIN=$_POST['R_domain']; $_COMPANY_NAME=$_POST['company_name']; $_COMPANY_EMAILS=$

这段代码现在给了我一些问题。由于某些原因,当您选中复选框进行提交时,它将跳过更新并直接进入插入创建另一个条目,而此时它应该只是更新

有没有更好的方法来处理这样的场景:如果条目不存在,您希望插入

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

我认为现在发生的是,在更新查询之后检查是否有行被更新。如果列中的所有数据在更新后保持不变,则
mysqli\u impacted\u rows
函数将返回0,从而将代码移动到插入查询

您应该做的是执行
选择
查询以检查记录是否存在
WHERE DOMAIN='$\u DOMAIN'
。如果是,则执行更新,否则执行插入。将当前的
if-else
修改为此。
例如:

我认为现在发生的是,在更新查询之后检查是否有行被更新。如果列中的所有数据在更新后保持不变,则
mysqli\u impacted\u rows
函数将返回0,从而将代码移动到插入查询

您应该做的是执行
选择
查询以检查记录是否存在
WHERE DOMAIN='$\u DOMAIN'
。如果是,则执行更新,否则执行插入。将当前的
if-else
修改为此。
例如:

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

 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将更新地址、城市和zipcode。当然,您应该根据您的需要对SQL代码进行更改


我希望这会有所帮助。

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

 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将更新地址、城市和zipcode。当然,您应该根据您的需要对SQL代码进行更改


我希望这能有所帮助。

您在哪里检查复选框条件?您的脚本甚至有使用任何人都知道的风险,如果其他人使用的话?外部IF或内部IF???您在哪里检查复选框条件?您的脚本甚至有可能使用任何人都知道该IF或其他IF属于哪个的脚本?外部IF还是内部IF???