我正在尝试使用数组更新MS Access表,这里是我的代码
for($i = 1; $i<=$rows; $i++)
{
$seedsize[$i] = $_POST['packageType'.$i];
$RefNo[$i] = $_POST['field'.$i];
(int)$qtyOrder[$i] = $_POST['ordered'.$i];
(int)$qtyDel[$i] = $_POST['delivered'.$i];
$unitPrice[$i] = $_POST['unitPriceDtl'.$i];
$ref2[$i] = $_POST['grade'.$i];
//$date[$i] = $_POST['myDate'.$i];
}
$InvoiceID = $_SESSION['InvoiceID'];
$sql = "UPDATE
[Tbl_Invoice_Details]
SET
[Seed Size]=?,
[RefNo]=?,
[Quantity Ordered]=?,
[Quantity Delivered]=?, [Ref2]=?,
[PricePerUnit]=?
WHERE
[Invoice_ID]=?";
$data = $conn2->prepare($sql);
for($x = 1; $x <= 4; $x++)
{
$data->execute(array($seedsize[$x], $RefNo[$x], $qtyOrder[$x], $qtyDel[$x], $unitPrice[$x], $ref2[$x], $InvoiceID));
echo $RefNo[$x]."<br/>";
}
我收到此错误&#34;投射规范的字符值无效:-3030 [Microsoft] [ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。&#34;
感谢您的帮助!
答案 0 :(得分:0)
您确认数据中没有任何空值吗?空值可能导致强制转换错误。
我建议投射所有数值:
for($i = 1; $i<=$rows; $i++)
{
$seedsize[$i] = $_POST['packageType' . $i]; // Not sure about this one
$RefNo[$i] = (int)$_POST['field' . $i];
$qtyOrder[$i] = (int)$_POST['ordered' . $i];
$qtyDel[$i] = (int)$_POST['delivered' . $i];
$unitPrice[$i] = (float)$_POST['unitPriceDtl' . $i];
$ref2[$i] = $_POST['grade' . $i]; // Not sure about this one
//$date[$i] = $_POST['myDate' .$i];
}
请注意,演员表应位于作业运算符的右侧。
答案 1 :(得分:0)
为什么在第二个for循环中有4个硬编码?只是好奇。
我认为问题是(int)$ qtyOrder [$ i]或(int)$ qtyDel [$ i]或其他任何问题。错误是说它预期获得的数据不是它得到的数据,所以在某个地方你只需要123(数字)就发送了ABC。您应该对POST信息进行任何处理,可能会出现如下情况:
$qtyOrder[$i] = intval($_POST['ordered'.$i]);
$qtyDel[$i] = intval($_POST['delivered'.$i]);
我从来没有做过你正在做的事情,但我认为这会让你走上正轨。 Here is the PHP manual page I looked at