PHP变量值不更新MySQL表字段?

时间:2012-10-04 18:08:30

标签: php mysql

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

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

但是现在我有一个if / else来检查更新特定字段。如何存储" do-not-update"值在相应的变量中?

因为否则我必须对整个查询进行if / else检查,只针对一个字段。

我只想尽可能高效。 :)

我的查询如下:

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

5 个答案:

答案 0 :(得分: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'";

答案 1 :(得分: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'])."'"

然后执行您的字符串作为查询。

答案 2 :(得分:0)

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

1)指定一个标准,确保field1field2仅在符合条件的情况下更新。如果条件不匹配,则不会更新记录。这是最常见的方式。

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

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

答案 3 :(得分:0)

我不确定你要求的是什么,但也许这会回答你的问题:

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

当然,正如编写的那样,您正在使用代码打开SQL注入。

答案 4 :(得分: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或更好的东西来清理所有用户输入。

快乐编码:)