PHP / MySQLI无法正确更新

时间:2016-07-16 14:23:34

标签: php mysqli insert sql-update

PHP / MySQLI

 $query = $conn->query(
        "SELECT
        cart.cart_id,
        cart.user_ip,
        cart.cart_amount,
        cart.fk_product_id,
        products.product_id,
        products.prod_amount
    FROM
        cart
    INNER JOIN
        products
    ON
        cart.fk_product_id = products.product_id
    WHERE
        fk_product_id = '{$productID}' AND user_ip = '{$ip}'
    ");

    $item = $query->fetch_assoc():

    $FKproductID = $item['fk_product_id'];
    $FKproductID = iSQLsecure($objConnection, $FKproductID);
    $FKproductID = trim($FKproductID);

    $CartAmount = $item['cart_amount'];
    $CartAmount = iSQLsecure($objConnection, $CartAmount);
    $CartAmount = trim($CartAmount);

    $ProductAmount = $item['prod_amount'];
    $ProductAmount = iSQLsecure($objConnection, $ProductAmount);
    $ProductAmount = trim($ProductAmount);

    $one = 1;

    $add_amount = $CartAmount + $one;
    $remove_amount = $ProductAmount - $one;

    if($FKproductID == $productsID) {
        $update_cart_item = $objConnection->query("UPDATE cart SET cart_amount = '{$add_amount}' WHERE fk_product_id = '{$productID}' AND user_ip = '{$ip}'");
        $update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_amount}' WHERE product_id = '{$productID}'");
    } else {
        $add_item = $objConnection->query("INSERT INTO cart (user_ip, add_amount, fk_product_id) VALUES ('{$ip}', '{$add_amount}', '{$productID}')");
        $update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_amount}' WHERE product_id = '{$productID}'");
    }

    $objConnection->close();

我的问题

$update_product_amount = $objConnection->query("UPDATE products SET prod_amount = '{$remove_ProductAmount}' WHERE product_id = '{$productID}'");

我使用这两个地方if($FKproductID == $productsID) { /*HERE1*/ } else { /*AND HERE2*/}

出于某种原因,它适用于" HERE1 "但不是" HERE2 "?

如果项目不在购物车中

它会将其插入我的购物车"数据库和更新"产品"金额价值。它应该从当前产品数量中删除 1 (10变为9)。相反,它将10变为-1。

如果商品在购物车中

它完美更新并将10变为9.代码完全相同但得到两个不同的结果?

2 个答案:

答案 0 :(得分:0)

我假设上面的代码不完整,因为某些变量名称不一致($remove_amount vs $remove_ProductAmount),但在某些情况下你的代码运行正常。

对于查询,为什么不在更新查询中减去金额?像

这样的东西
UPDATE table SET field = field - 1 WHERE x = y

即使数字1是动态的,在变量上生成数字然后将其转换为整数也更安全。在最坏的情况下,它将被转换为零(可以在if()上轻松添加,作为额外验证)。

我还建议使用调试器。如果您不想在设置XDebug时遇到麻烦,那么像enter image description hereKint这样的东西就足够了。

答案 1 :(得分:0)

我认为问题可能出在您的INNER JOIN上。据我所知,如果项目不在您的购物车中,那么cart.fk_product_id将不存在,因此查询将返回一个空对象。

如果您关闭了错误显示(可能在php.inidisplay_errors = Off),则在方程式中,不存在的数组键将被视为空。

当需要执行方程式时,php会将null转换为integer(0),如果if语句失败,则会导致0 - 1 = -1

您是否尝试输出查询的返回对象?您可以使用以下方法执行此操作:

echo "<pre>"; print_r($item); echo "</pre>";

(&lt; pre&gt;标记使其更具可读性。)

另外,如果您log_errors已开启,请检查httpd / apache错误日志的状态。