首页 > 解决方案 > PHP不会为多个查询抛出错误

问题描述

我有一些 PHP 代码来执行多个查询,其中一个查询有错误。但是 PHP 没有检测到它。这是代码

        $updateCategoriesQ = "DELETE FROM category_products WHERE product = $id; INSERT INTO category_products (category, products) VALUES ";
        foreach ($product['categories'] as $key) {
            $updateCategoriesQ .= "(".mysqli_real_escape_string($connect, $key)."', $id), "; //error is here in the quote
        }
        $updateCategoriesQ = rtrim($updateCategoriesQ, ', ');
        o($updateCategoriesQ);

        $updateCategories = mysqli_multi_query($connect, $updateCategoriesQ);
        if($updateCategories){
            o('query ok'); //receives this output (wrapper function for echo)
        }

形成的查询是

DELETE FROM category_products WHERE product = 1; INSERT INTO category_products (category, products) VALUES (1', 1), (2', 1)

第二个查询有错误,但 PHP 说没问题。如果我在第一个查询(删除)中创建错误,那么它会抛出错误,但如果错误在第二个查询中则不会。这里有不同的捕获错误的方法吗?

标签: phpmysqlierror-handlingmysqli-multi-query

解决方案


好的,在@Barmar 和这个答案的帮助下,这是在后续查询中捕获错误的好方法。

        $updateCategories = mysqli_multi_query($connect, $updateCategoriesQ);
        if($updateCategories){
            do {
                mysqli_next_result($connect);
                $result = mysqli_store_result($connect);
                if (!$result) {
                   o(mysqli_error($connect));
                }
            } while (mysqli_more_results($connect));
        } else {
            o(mysqli_error($connect));
        }

推荐阅读