0

我已经在网上搜索了几个小时并尝试了不同的方法,但我无法弄清楚为什么 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 告诉我插入查询正在接收值,但它不喜欢处理小数。

4

3 回答 3

0

小数点分隔符可能存在问题。
在调试此类情况时,对e-ve-ry-thing至关重要! 您为什么不 var_dump 您的值以进行更仔细的检查?你为什么不只玩小数,没有 POST,没有其他值?var_dump()

题为“无法使用 PDO 插入十进制值”的问题应包含简短的可复制代码,其中包含向读者呈现的十进制值和结果。
以间接的方式判断对你没有帮助,尤其是不会给你带来陌生人的帮助。

“var_dump your values”表示每个可疑值,例如

var_dump($item_cost[$i]);


如果没有输出,则在 循环内部-然后有空值,因此,难怪没有插入任何内容。

顺便说一句,您将显然十进制item_cost值绑定到显然整数amount字段。是错字吗?

但同样——某个可复制的证明代码在哪里包含一个插入查询、一个硬编码的十进制值和一个结果?呃——当然还有表定义。

于 2013-02-18T18:07:20.463 回答
0

尝试这个?

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

至少当我使用 PDO 处理 MySQL 十进制数据类型时,它对我有用。

于 2015-10-31T05:52:42.560 回答
-1

使用以下内容显示发布到 PHP 脚本的所有值的内容:

print_r($_POST);
于 2014-01-01T22:16:23.057 回答