2011-08-24 49 views
1

我是從一種形式是這樣的如何嘗試更新表時忽略NULL值

$value = mysql_real_escape_string($_POST['id']); 
$value1 = mysql_real_escape_string($_POST['name']); 
$value2 = mysql_real_escape_string($_POST['age']); 

獲取價值觀和我使用這樣一個MySQL的語法將信息存儲在數據庫

$sql = "UPDATE table SET name='$value1',age='$value2' WHERE id ='$value'"; 

我希望上面提到的UPDATE語法只在值不爲NULL或不留空時才起作用。

例如,如果名稱形式留空白,一些價值被賦予了年齡不是隻有年齡應該更新,並沒有名字..

我怎樣才能做到這一點?

回答

-1

試試這個:

//$value1 = 'joey'; 
$value2 = 123; 

$sql = "UPDATE table SET "; 
$sql .= !empty($value1) ? " name='{$value1}'," : null; 
$sql .= !empty($value2) ? " age='{$value2}'," : null; 
$sql = substr($sql, 0, -1); 
$sql .= " WHERE id ='{$value}'"; 

echo $sql; 

它應該只更新非空的變量。像上面提到的其他人一樣逃脫。

+1

這是一個糟糕的編碼的例子,它會讓那些不得不將代碼維持在惡夢中的人的生活和生活變得糟糕。除了許多其他的事情,你至少可以把你想要設置的所有字段放到一個數組中,檢查它是否爲空,然後使用'implode(',',$ fields)'來避免減少「過多」的昏迷。在需要時擴展會更容易。 – Slava

+0

我同意。我只是簡單地展示了一種方法來完成作爲一個概念的操作。 –

1

您可以使用empty()來檢查值是否爲空或空白。

if (!empty($value) && !empty($value1) && !empty($value2)) { 
    // Do query 
} 

你也應該使用isset()保證值使用它們之前就存在檢查$ _ POST元素:

if (isset($_POST['id'])) { 
    $value = mysql_real_escape_string($_POST['id']); 
} 
+0

我不明白..你可以舉一些例子.. –

+0

empty()如果​​它們不爲null,則返回true。 '!empty()'用於檢查它是否爲空。 – theking963

1

在一個非常基本的水平,你可以檢查使用isset非空值。

例如:

if(isset($_POST['id']) && isset($_POST['name']) && isset($_POST['age'])) { 
    // Do the insert... 

} 

不過,我懷疑你可能會想進行一些適當的驗證,以確保年齡是有效的,等

(可能通過 if(intval($value2) !== 0)如果是有道理的。)

此外,我會真的建議不允許用戶任意更新數據庫記錄。 (職位是很容易欺騙,用戶可以簡單地改變形式 'id' 值。)

+1

您必須對_POST值執行isset()。無論_POST數據中有什麼,mysql_real_escape_string()都會返回一個空字符串,它使$ value變量被設置。 –

+0

@Marc這是一個非常有效的觀點。我會更新我的例子。感謝您的提醒。 :-) –

1
if(isset($_POST['id']) && isset($_POST['name']) && isset($_POST['age'])) 
{ 
    $value = mysql_real_escape_string($_POST['id']); 
    $value1 = mysql_real_escape_string($_POST['name']); 
    $value2 = mysql_real_escape_string($_POST['age']); 

    $sql=" UPDATE table SET name='$value1',age='$value2' WHERE id ='$value'"; 
} 

參見:isset()

+0

更新查詢只適用於沒有任何值是空的...但我希望上面的工作,即使其中一個窗體被填充,只爲該單一值工作(例如,如果名稱窗體填充然後更新應該只發生在名稱字段中......) –

0
if ((isset($_POST['id']) && ($_POST['id'] !== '')) && 
    (isset($_POST['name']) && ($_POST['name'] !== '')) && 
    (isset($_POST['age']) && ($_POST['age'] !== ''))) { 
    ... everything ok ... do data base stuff 
} else { 
    die("Not correct"); 
} 
+0

UPDATE查詢只適用於沒有任何值爲空的情況下......但我希望上面的工作方式即使其中一個表單被填充並且僅適用於該單一值(例如,如果名稱表單被填充,則更新應該只發生在名稱字段中......) –