2013-02-18 90 views
0

我一直在網上拖了幾個小時,並嘗試不同的方法,我不明白爲什麼PDO不能插入其中一個值包含小數的任何行。不能插入十進制值與PDO

例如,如果輸入成本字段的值沒有小數值,那麼它工作正常。但是像小數點一樣,它只是忽略整行。

200件作品,甚至200.00件作品。但是像39.99這樣的東西不會。

下面的代碼:

$invoice_id = $db->lastInsertId('id'); 

$item_name = $_POST['item_name']; 
$item_qty = $_POST['item_qty']; 
$item_cost = $_POST['item_cost']; 
$item_vat = $_POST['item_vat']; 

for($i = 0; $i < count($item_name); $i++) { 
$item_query = $db->prepare("INSERT INTO hm_invoice_items(invoice, item, qty, amount, vat) VALUES(:invoice, :item, :qty, :amount, :vat)"); 
$item_query->bindParam(":invoice", $invoice_id); 
$item_query->bindParam(":item", $item_name[$i]); 
$item_query->bindParam(":qty", $item_qty[$i]); 
$item_query->bindParam(":amount", $item_cost[$i]); 
$item_query->bindParam(":vat", $item_vat[$i]); 

if (!$item_query->execute()) 
    { 
     die(showMessage("There has been a problem adding the invoice items.", "Error!")); 
    } 
} 

一個的var_dump告訴我,插入查詢被接收的值,但它不喜歡處理小數。

+0

忽略如何?你得到你的錯誤信息?你應該至少輸出mysql錯誤信息,而不是僅僅說「出現了問題」。 – 2013-02-18 17:59:52

+1

是DECIMAL類型的列嗎? – 2013-02-18 17:59:53

+1

爲什麼你使用'$ item_name [$ i]'而不是'$ _POST ['item_name'] [$ i]'?有沒有好處? – 2013-02-18 18:02:07

回答

0

小數點分隔符可能存在問題。
當調試這種情況下,它是必不可少的var_dump() e-ve-ry事情!
爲什麼不把var_dump的值仔細檢查? 爲什麼你不玩小數,沒有POST,沒有其他值?

標題爲「不能用PDO插入十進制值」的問題應該包含具有十進制值的可再現短代碼,以便讀者和結果。
通過間接措施進行判斷對你沒有任何幫助,特別是 - 不會給你帶來陌生人的幫助。

「的var_dump你的價值觀」是指每一個可疑的價值,像

var_dump($item_cost[$i]); 

你的循環
裏面,如果你沒有產出 - 再有就是空值,所以,難怪沒有插入。

順便說一句,你顯然是十進制item_cost值明顯整數amount字段的值。這是一個錯字嗎?

但是再次 - 某個可再現的校驗碼在哪裏包含一個插入查詢,一個硬編碼的十進制值和一個結果?呃 - 當然還有表格定義。

+0

出於某種原因,我從var_dump或PDO錯誤中得不到任何東西。 – Adam 2013-02-18 18:13:08

+0

嘗試插入成本2000和成本爲39.99的項目時,成本字段上的var_dump返回字符串(4)「2000」字符串(5)「39.99」。而db列被稱爲數量,就像我做過的那樣。 – Adam 2013-02-18 18:25:37

-1

使用以下命令來顯示所有值張貼到你的PHP腳本的內容:

print_r($_POST); 
0

試試這個?

$item_query->bindParam(":amount", floatval($item_cost[$i])); 

至少它適用於我在使用PDO處理MySQL十進制數據類型時。