-2

我有一个 PHP 代码块,它通过 AJAX 调用以将值插入表中,然后从该表中返回匹配值的列表。插入查询运行良好,但选择查询不返回任何内容。如果我进入 phpmyadmin 并手动运行选择查询,我会得到预期的结果集,但在 PHP 代码中,fetch_assoc() 返回 null。我已经确认所有变量都被正确传递,但代码永远不会进入 while 循环,因为集合中没有结果。下面是一组相关代码:

if (isset($_POST['action']) && $_POST['action'] == "link" && !empty($_POST['link_id']) && !empty($_POST['cat_id'])) {
    require_once(realpath(dirname(__FILE__)) . "/../config/config.php");
    $link_id = (int)$_POST['link_id'];
    $category_id = (int)$_POST['cat_id'];
    $query = $conn->query("INSERT INTO links_to_categories (link_id, category_id) VALUES ({$link_id}, {$category_id})");
    if ($query) {
        $cats = $conn->query("SELECT * FROM links_to_categories lc LEFT JOIN categories c ON lc.category_id = c.category_id WHERE lc.link_id = {$link_id}");
        while ($cat = $cats->fetch_assoc()) {
            echo "{$cat['category_name']} (<a href=\"#\" onclick=\"unlinkCategory({$link_id}, {$category_id});return false;\">x</a>)<br>";
        }
    }
    die();
}

这个和另一个函数(几乎相同,但执行的是 DELETE 而不是 INSERT)是我的代码中唯一存在此问题的函数。我有十几个正常工作的查询,包括在代码的不同部分运行良好的相同 SELECT 查询,所以这非常令人费解。

4

1 回答 1

3

——比尔盖茨在彩票中中大奖是真的吗?
——是的,完全正确。只不过不是比尔盖茨,而是约翰·多伊,不是彩票而是黑杰克,不是头奖而是 10 美元,不是赢了而是输了。

这个“几乎相同”破坏了整个事情。要责怪 mysqli,您必须在没有任何假设的情况下运行完全相同的查询。

实际上有整个 PHP 程序可以动态构建您的查询。该程序肯定有错误。因此,如果您的查询运行不符合您的预期,您必须验证程序的结果,即 -查询本身。

你有没有想过将结果查询回显,而不是运行它?只是为了确定它确实是您期望的查询?如果没有——是时候这样做了。

当然,它应该是一组精确的查询,与您手动运行的查询没有什么不同。

如果您确实从 mysqli运行完全相同的静态查询,并且结果与其他客户端不同 - 那么您正在使用这些客户端连接到不同的服务器。虽然 mysqli 永远不会干扰您的查询。你可以肯定这一点。

于 2013-11-01T06:04:40.163 回答