2013-08-30 67 views
1

用戶檢索他們的產品列表,並將該列表顯示在帶有預先填充數量的文本框的頁面上。用戶可以更改這些數量,然後表單將這些數據發送到更新頁面。我使用下面的語句來執行數據庫更新..MySQL不會更新爲零作爲值

$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?"; 

這完全適用於任何值,當用戶在文本框中放一個零,然後更新只是跳過這個值除並讓它在現有一。我已經直接進入數據庫,可以手動將值更改爲零,但沒有問題,但似乎是基於Web的聲明不起作用。它被設置爲INT,我也嘗試過VARCHAR,但沒有任何運氣。任何想法會導致sql語句忽略零(0)值?

完全更新代碼

$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$conn = new PDO($dsn, $username, $password, $opt); 
$sql = "UPDATE reservations SET quantity=? WHERE tableID= ?"; 
$stmt = $conn->prepare($sql); 
foreach($_POST["Quantity"] as $id => $quantity) { 
    if ($quantity) $stmt->execute(array($quantity, $id)); 
} 
+1

請顯示如何將參數插入此查詢。 – Itay

+0

您是否使用反引號或引號的值?如果它是一個整數,你不需要。 – Sablefoste

+0

並且還給出該表的架構,即'desc reservations' –

回答

6

的問題就在這裏:

if ($quantity) $stmt->execute(array($quantity, $id)); 

0計算爲false,那麼這個if語句跳過你的執行命令,如果$quantity爲零。

我不知道爲什麼你有這個if語句開始,但也許你應該用$quantity || $quantity==="0"替換條件。

+1

'$ quantity'可能是一個字符串,因此請檢查'===「0」'。 –

+0

@SalmanA:極好的一點。編輯。 – user1618143

+0

他甚至可以做'if(is_numeric($ quantity))' – ub3rst4r