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 にフィールドを空の値で更新するように指示すると、それが実行されます。私が見る限り、3 つのオプションがあります (私の好みの順序で...)。

  1. フォームを表示するときに、データベースの値とともにフォームのすべての値がロードされていることを確認してください。すべての値を表示したくない場合は、非表示の入力を使用できます。
  2. SQL ステートメントの 2 番目のセクション ( の後ON DUPLICATE KEY UPDATE) を動的に構築します。変数が空でない場合にのみフィールドを追加します。
  3. SQL ステートメントの 2 番目のセクション ( の後ON DUPLICATE KEY UPDATE) を調整して、特定の数のフィールドのみを更新します。これは本当にお勧めしません。

ところで、SQL インジェクションの問題を回避するために、変数がバインドされたプリペアド ステートメントを使用することもお勧めします。

編集: 2 番目のオプションは次のようになります。

$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 に答える