2012-10-04 105 views
0

我正在更新發布PHP數據的MySQL表。 我首先收集發佈的數據,並將它們放入適當的變量中。連同必要的if/else檢查。PHP變量值不更新MySQL表字段?

然後,我只需要寫一次我的查詢。

但是現在我有一個if/else來檢查是否更新特定的字段。如何將「do-not-update」值存儲在相應的變量中?

因爲否則我必須對整個查詢進行一次if/else檢查,僅限於一個字段。

我只想盡可能高效。 :)

我的查詢如下:

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

如果沒有看到您的代碼很難回答這個問題。 –

+0

你並不需要爲此看到我的代碼..我只是想將某種類型的字符串存儲在MySQL認爲是「不更新」值的變量中,如果這甚至可能的話。 – fishbaitfood

+0

會不會更新特定字段?或只爲特定記錄? – dzogchen

回答

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'"; 
+0

布爾字段會忽略''嗎?無法想象我還沒有測試過這個... – fishbaitfood

+0

你的意思是如果'$ field2 = true/false'? –

+0

看起來像有一個額外的)在$ sql – dzogchen

0

如果你問的字段是否應該更新,你可以做兩件事情之一:

1)指定確保field1field2如果行符合條件只更新標準。如果條件不匹配,記錄將不會更新。這是最常見的方式。

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

2)在UPDATE之前運行查詢以查看是否執行更新。

0

我不完全相信你問什麼,但也許這個回答你的問題:

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

當然,你打開自己高達SQL注入的代碼,爲編寫。

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'])."'" 

然後執行你的字符串作爲查詢。

0

讓我們假設你已經收集到的領域中的數組$fields這樣的更新:

$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 ] = ""; 

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

現在你需要生成查詢,您可以在陣列中循環做到這一點

溫馨提示: 使用mysqli_real_escape_string或更好的東西來清理所有用戶輸入。

快樂編碼:)

+0

謝謝!我使用mysql_real_escape_string():) – fishbaitfood