2013-02-18 5 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, а не просто сказать «была проблема». –

+1

Является ли ваша колонка типом DECIMAL? –

+1

Почему вы используете '$ item_name [$ i]' вместо '$ _POST ['item_name'] [$ i]'? Есть ли польза? –

ответ

0

Может возникнуть проблема с десятичным разделителем.
При отладке таких случаев это essential до var_dump() e-ve-ry-thing!
Почему вы не var_dump свои значения для более тщательного осмотра? Почему вы не играли с десятичными знаками, без POST, без других значений?

Вопрос под названием «Невозможно вставить десятичное значение с PDO» должен содержать короткий воспроизводимый код с десятичным значением, представляемым читателям, и результатом.
Судя по косвенным мерам, вам не поможет, и, особенно, не поможет вам посторонним.

«var_dump ваших ценностей» означает любое подозрительное значение, как

var_dump($item_cost[$i]); 

внутри вашего цикла
, если вы не получите никакого вывода - то есть пустое значение, поэтому не удивительно, что ничего не вставлен.

Кстати, вы связываете, по-видимому, десятичное значение item_cost значение, по-видимому, целое число amount поле. Это опечатка?

Но опять же - где определенный воспроизводимый код проверки содержит один запрос на вставку, одно твердое десятичное значение и один результат? Ух - и определение таблицы, конечно.

+0

По какой-то причине я ничего не получаю от ошибок var_dump или PDO. – Adam

+0

При попытке вставить элемент стоимостью 2000 и один с стоимостью 39,99, var_dump в поле затрат возвращает строку (4) «2000» (5) «39.99». И столбец db называется количеством, его просто так, как я это сделал. – Adam

-1

Используйте следующие отображения содержимого все значения публикуемую на ваш PHP скрипт:

print_r($_POST); 
0

Попробуйте это?

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

По крайней мере, это работает для меня, когда я имею дело с десятичным типом данных MySQL с PDO.

Смежные вопросы