我一直在网上拖网几个小时并尝试不同的方法,我无法理解为什么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 :(得分:0)
小数点分隔符可能存在问题
在调试此类情况时,对var_dump()
e-ve-ry-thing来说,必不可少!
你为什么不为更仔细的检查而改变你的价值?
你为什么不玩小数,没有POST,没有其他值?
标题为“无法使用PDO插入小数值”的问题应包含可重现的简短代码,并且读数和结果会显示十进制值。
通过间接措施判断对你没有任何帮助,特别是 - 不会给你陌生人的帮助。
“var_dump your values”表示每个可疑值,例如
var_dump($item_cost[$i]);
循环中的
如果你没有输出 - 那么就有空值,所以,难怪没有插入。
顺便说一句,您将明显的十进制item_cost
值绑定到明显的整数amount
字段。这是一个错字吗?
但是再次 - 某个可重现的校对码在哪里包含一个插入查询,一个硬编码的十进制值和一个结果?呃 - 当然还有表格定义。
答案 1 :(得分:0)
试试这个?
$item_query->bindParam(":amount", floatval($item_cost[$i]));
当我使用PDO处理MySQL十进制数据类型时,至少它适用于我。
答案 2 :(得分:-1)
使用以下内容显示发布到PHP脚本的值所有的内容:
print_r($_POST);