2012-03-16 84 views
4

我有一個表單來更新用戶的詳細信息,他們不必填寫每個字段。因此,它將通過POST將空字符串傳遞給數據庫。這是我的查詢:如何防止MySQL使用空字符串更新列?

$q = "UPDATE mdl_user SET firstname='$fname', lastname='$lname', email='$email', 
     address='$address', city='$city', school='$school', phone1='$phone' 
     WHERE id='$uid'"; 

有沒有辦法讓MySQL能夠檢查是否例如$fname是一個空字符串,如果它是空的不更新領域?

如果沒有,那麼我應該如何去做這個在PHP中?

回答

9

您可以使用IF語句給每個你需要檢查現場。例如:

$q = "UPDATE mdl_user SET firstname=IF(LENGTH('$fname')=0, firstname, '$fname'), lastname=IF(LENGTH('$lname')=0, lastname, '$lname'), email=IF(LENGTH('$email')=0, email, '$email'), address='$address', city='$city', school='$school', phone1='$phone' WHERE id='$uid'"; 
+0

嘿,歡呼聲。你能解釋IF條款中的第二和第三個參數是什麼意思嗎? – user1219572 2012-03-16 13:19:56

+2

嗨。 IF()。所以如果字符串長度= 0,那麼不要改變它。 – 2012-03-16 13:25:26

+0

我喜歡這=)。 – user1219572 2012-03-16 13:29:55

3

我會做這個

<?php 
if ($fname) { 
$fname = "firstname='$fname',"; 
} else { 
$fname = ''; 
} 
$q = "UPDATE mdl_user SET $fname lastname='$lname', email='$email', address='$address', city='$city', school='$school', phone1='$phone' WHERE id='$uid'"; 
?> 

但是,你真的應該擔心你的代碼是如何不安全的。

+2

不安全?你確定?你怎麼知道他不是逃避每一個變數? – 2012-03-16 13:06:54

+0

它不會更新爲空字符串: $ fname =''? – user1219572 2012-03-16 13:07:44

+0

人們可以假設這些變量在從表單收集後已經過適當的清理。我希望 ? 空字符串將不會向QUERY添加任何內容,並且由於列名在其中,因此它不會在數據庫中更新它。 – 2012-03-16 13:08:23

-2

首先運行一個SELECT語句,並做了mysql_num_row()如果返回值> 0然後退出()

+0

選擇聲明什麼? :/我只是想確保我不更新一個空字符串的列,從而覆蓋該列中的任何以前的值 – user1219572 2012-03-16 13:10:40