我用发布的PHP数据更新MySQL表。 我首先收集发布的数据,并将它们放入适当的变量中。连同必要的if / else检查。
然后,我只需要写一次查询。
但是现在我有一个if / else来检查更新特定字段。如何存储" do-not-update"值在相应的变量中?
因为否则我必须对整个查询进行if / else检查,只针对一个字段。
我只想尽可能高效。 :)
我的查询如下:
$updateTable = mysql_query("UPDATE myTable SET field1 = '$field1', field2 = '$field2'");
答案 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)指定一个标准,确保field1
和field2
仅在符合条件的情况下更新。如果条件不匹配,则不会更新记录。这是最常见的方式。
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或更好的东西来清理所有用户输入。
快乐编码:)