PHP INSERT ON DUPLICATE KEY IGNORE添加空值?

时间:2013-02-19 20:44:59

标签: php insert

我正在使用以下代码从xml文件更新数据库,一切都按预期工作,但现在我必须向表中添加2个以上的字段,并通过html表单手动更新数据。

当我运行表单时,我可以将数据插入“afk”和“remarks”字段,但是在运行以下查询时,它会清空字段。

$insert = "INSERT INTO `ecmt_memberlist` (characterID,name,startDateTime,baseID,base,title,logonDateTime,logoffDateTime,locationID,location,shipTypeID,shipType,roles,grantableRoles, last_modified) VALUES('$characterID','$name','$startDateTime','$baseID','$base','$title','$logonDateTime','$logoffDateTime','$locationID','$location','$shipTypeID','$shipType','$roles','$grantableRoles','$modifiedTS') ON DUPLICATE KEY UPDATE 
name='$name',
startDateTime='$startDateTime',
baseID='$baseID',
base='$base',
title='$title',
logonDateTime='$logonDateTime',
logoffDateTime='$logoffDateTime',
locationID='$locationID',
location='$location',
shipTypeID='$shipTypeID',
shipType='$shipType',
roles='$roles',
grantableRoles='$grantableRoles',
last_modified = '$modifiedTS'";

是否可以告诉查询忽略已经存储在额外2x手动字段中的值并保持数据完好无损?

非常感谢

1 个答案:

答案 0 :(得分:0)

如果你告诉mysql更新一个空值的字段,它会,所以我可以看到你有三个选项(按我的喜好...):

  1. 确保表单中的所有值在显示时都加载了数据库中的值。如果您不想显示所有值,可以使用隐藏的输入;
  2. 动态构建sql语句的第二部分(ON DUPLICATE KEY UPDATE之后);如果变量不为空,则仅添加字段;
  3. 调整sql语句的第二部分(在ON DUPLICATE KEY UPDATE之后)以仅更新特定数量的字段。我不会真的推荐这个。
  4. 顺便说一句,我还建议使用带有绑定变量的预准备语句来避免sql注入问题。

    修改:第二个选项类似于:

    $insert = "INSERT INTO `ecmt_memberlist` (characterID,name,startDateTime,baseID,base,title,logonDateTime,logoffDateTime,locationID,location,shipTypeID,shipType,roles,grantableRoles, last_modified) VALUES('$characterID','$name','$startDateTime','$baseID','$base','$title','$logonDateTime','$logoffDateTime','$locationID','$location','$shipTypeID','$shipType','$roles','$grantableRoles','$modifiedTS') ON DUPLICATE KEY UPDATE
                 name='$name'";
    if (!empty($startDateTime))
    {
      $insert .= ", startDateTime='$startDateTime'";
    }
    // etc.
    

    或者如果你有一个数组中的所有字段,你可以循环,将字符串添加到一个新数组并内爆。