2016-01-28 17 views
1

更新字段當我嘗試使用PHP下面的查詢字符串來更新表:PHP MySQL的不包含值小數

UPDATE card_designs SET `card_price` = '6180', 
         `annual` = '257.3', 
         `initial_payment` = '6512.3' 
WHERE card_id = '1' 

它不正確更新。 card_price值正確輸入。然而,年度進來時0initial_payment作爲6255.00進來。

如果字段是VARCHAR,DECIMALDOUBLE,則無關緊要。如果該值有小數點,則全部搞砸了。

此外,如果我在SQL客戶端運行上述查詢,查詢工作正常。

這是構造查詢的PHP代碼。我使用的mysqli:

$sql = "UPDATE ". $table ." SET "; 
$updates = array(); 
foreach ($variables as $field => $value) { 
    array_push($updates, "`$field` = '$value'"); 
} 
$sql .= implode(', ', $updates); 

//Add the $where clauses as needed 
if (!empty($where)) { 
    foreach ($where as $field => $value) { 
     $value = $value; 

     $clause[] = "$field = '$value'"; 
    } 
    $sql .= ' WHERE '. implode(' AND ', $clause); 
} 

if (!empty($limit)) { 
    $sql .= ' LIMIT '. $limit; 
} 

$query = $this->mysqli->query($sql); 
+0

你插入'257.3'直接 - >'\'年度'='257.3'...,或者它是一個變量,即。 '$年度= 257.3',你正在做'...年度='年度'...'? – Sean

+3

描述你使用的PHP術語。 php有數百種運行sql表達式的方法。你使用哪個庫?只顯示代碼,不會生成SQL腳本。同時顯示錶DDL。 – djxak

+1

插入數值時,不要引用它們。你可以在問題中添加你的表格描述嗎? –

回答

1

我假設你的數據庫表字段的數據類型是十進制(9,2)

// Prepare query 
$table = "card_designs"; 
$variables = array(
    "card_price" => "6180.00", 
    "annual" => "257.3", 
    "initial_payment" => "6512.3" 
);  

$where = array(
    "id" => "1" 
); 

$sql = "UPDATE ". $table ." SET "; 
$updates = array(); 
foreach ($variables as $field => $value) 
{ 
    array_push($updates, "$field = $value"); 
} 

$sql .= implode(', ', $updates); 
//Add the $where clauses as needed 
if (!empty($where)) 
{ 
    foreach ($where as $field => $value) 
    { 
     $value = $value; 
     $clause[] = "$field = $value"; 
    } 

    $sql .= ' WHERE '. implode(' AND ', $clause); 
} 

if (!empty($limit)) 
{ 
    $sql .= ' LIMIT '. $limit; 
} 

// Run query 
if ($mysqli->query($sql)) 
{ 
    echo "Record updated successfully"; 
} 
+0

快速的問題。爲什麼這使查詢工作:array_push($ updates,「$ field = $ value」);但是這不? \t \t if(is_numeric($ value)) \t \t \t array_push($ updates,「$ field = $ value」); \t \t else \t \t \t array_push($ updates,「$ field ='$ value'」); – Chris

+0

我認爲你的突破點是這個單引號(使用mysql編輯器)圍繞$字段,這是不同的價值引號$ value「'$ field' ='$ value'」... – MasoodUrRehman