0

我正在使用以下代码从 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 手动字段中的值并保持数据完整?

非常感谢

4

1 回答 1

0

如果你告诉 mysql 用空值更新一个字段,它会,据我所知,你有三个选项(按我的偏好排列......):

  1. 确保表单中的所有值在呈现时都与数据库中的值一起加载。如果您不想显示所有值,则可以使用隐藏输入;
  2. 动态构建 sql 语句的第二部分(之后ON DUPLICATE KEY UPDATE);仅当变量不为空时才添加字段;
  3. 调整 sql 语句的第二部分(在 之后ON DUPLICATE KEY UPDATE)以仅更新特定数量的字段。我真的不会推荐这个。

顺便说一句,我还建议使用带有绑定变量的准备好的语句来避免 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.

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

于 2013-02-19T21:05:24.070 回答