0

我正在使用已发布的 PHP 数据更新 MySQL 表。我首先收集发布的数据,并将它们放入适当的变量中。连同必要的 if/else 检查。

然后,我只需要编写一次查询。

但现在我有一个 if/else 来检查是否更新特定字段。如何在相应的变量中存储“不更新”值?

因为否则我必须对整个查询进行 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(真或假),

   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

如果您询问是否应该更新该字段,您可以执行以下两项操作之一:

1) 指定一个标准,确保field1并且field2仅在行与标准匹配时才更新。如果条件不匹配,则不会更新记录。这是最常见的方式。

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

2) 在 之前运行查询UPDATE以查看是否执行更新。

于 2012-10-04T18:14:08.333 回答
0

我不确定您要的是什么,但也许这可以回答您的问题:

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

当然,您正在向编写的代码开放 SQL 注入。

于 2012-10-04T18:16:14.813 回答
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 回答