PHP Mysqli不返回任何行,而手动SQL查询返回结果

时间:2013-11-01 05:43:01

标签: php mysql mysqli

我有一个PHP代码块,通过AJAX调用以将值插入表中,然后返回该表中匹配值的列表。 insert查询运行得很好,但select查询没有返回任何内容。如果我进入phpmyadmin并手动运行select查询,我会得到预期的结果集,但在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查询,所以这非常令人费解。

1 个答案:

答案 0 :(得分:3)

- 比尔盖茨是否真的在彩票中获得了大奖? - 是的,非常正确。只有不是比尔盖茨,而是约翰·多伊,不是乐透,而是黑杰克,不是累积奖金,而是10美元,但没有赢,但输了。

这个“几乎相同的”破坏了整个事情。要责怪mysqli,你必须运行完全相同的查询而不做任何假设。

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

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

当然,它应该是一组精确的查询,与您手动运行的查询没有区别。

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