0

投稿された PHP データで MySQL テーブルを更新しています。まず、投稿されたデータを収集し、適切な変数に入れます。必要な if/else チェックと一緒に。

その後、クエリを 1 回書くだけで済みます。

しかし今、特定のフィールドを更新するかどうかをチェックする if/else があります。対応する変数内に「更新しない」値を格納するにはどうすればよいですか?

それ以外の場合は、1 つのフィールドに対してのみ、クエリ全体に if/else チェックを入れる必要があります。

私はできるだけ効率的になりたいだけです。:)

私のクエリは次のとおりです。

$updateTable = mysql_query("UPDATE myTable SET field1 = '$field1', field2 = '$field2'");
4

5 に答える 5

2

$_POST を変数に入れているところならどこでも、これを行います。

 if( $field2 === 'xyz' ) { //if value is 'xyz', do not update
     $sql = ''; 
  } else 
      $sql = ", field2 = '$field2'";

次に、クエリで、

   $updateTable = mysql_query("UPDATE myTable SET field1 = '$field1' $sql");

編集: 1/0 (true または false) を使用する場合、

   if( $field2 == true ) { //if value is true, do not update
     $sql = ''; 
  } else 
      $sql = ", field2 = '$field2'";
于 2012-10-04T18:12:12.147 に答える
2

クエリを作成して、PHP 文字列に格納する必要があります。次に例を示します。

$sql = "UPDATE `table` SET ";
if ($_POST['foo']!=='') {
  $sql .= " `foo`='".mysql_real_escape_string($_POST['foo'])."',";
}
if ($_POST['bar']!=='') {
  $sql .= " `bar`='".mysql_real_escape_string($_POST['bar'])."',";
}
$sql = rtrim($sql,',');
$sql .= " WHERE `id`='".mysql_real_escape_string($_POST['id'])."'"

次に、文字列をクエリとして実行します。

于 2012-10-04T18:16:58.573 に答える
0

フィールドを更新する必要があるかどうかを尋ねる場合は、次の2つのいずれかを実行できます。

1)行が基準に一致する場合にのみ更新されることfield1を保証する基準を指定します。field2基準が一致しない場合、レコードは更新されません。これが最も一般的な方法です。

UPDATE myTable ...
WHERE criteria1 = 1 AND criteria2 = 'Red'

2)の前にクエリUPDATEを実行して、更新を実行するかどうかを確認します。

于 2012-10-04T18:14:08.333 に答える
0

$fields次のような配列で更新するフィールドを収集したと仮定します。

array (
'filed1' => 'value' ,
'field2' => ''value
)

次に、クエリを生成する必要があります。これは、配列をループすることで実行できます。

    $sql = "UPDATE mytable ";
$sql .= $fields ? "SET " : "" ;
    foreach ($fields as $key=>$value) {
    $sql.= $value ? "$key = '$value' , " : '' ;
    }
    //you need to omit the trailing ','
$sql[strlen($sql) -1 ] = "";

ヒント: mysqli_real_escape_stringまたはそれよりも優れたものを使用して、すべてのユーザー入力をサニタイズしてください。

ハッピーコーディング:)

于 2012-10-04T18:50:04.230 に答える
0

あなたが何を求めているのか正確にはわかりませんが、おそらくこれがあなたの質問に答えます:

$updateTable = mysql_query("
UPDATE myTable SET
    field1 = IF('$field1'>'','$field1', field1),
    field2 = IF('$field2'>'','$field2', field2)
");

もちろん、書かれているように、コードを使用して SQL インジェクションにさらされています。

于 2012-10-04T18:16:14.813 に答える