使用数组的SQL PHP UPDATE查询

时间:2014-09-24 21:26:48

标签: php sql sql-server arrays

我正在尝试使用数组更新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;

感谢您的帮助!

2 个答案:

答案 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