查询在phpMyAdmin中工作,但在MySQLi中不工作


Query working in phpMyAdmin but not in MySQLi

我得到了这个代码:

$qstring = "SELECT COUNT(*) as count,name FROM schedules WHERE position = 'test' GROUP BY name ORDER BY count DESC";
        if ($result = $mysqli->prepare($qstring)) {
            /* execute query */
            $result->execute();
            /* bind result variables */
            $result->bind_result($count,$name);
            /* fetch value */
            $result->fetch();
            printf($count, $name);
            /* close statement */
            $result->close();
        }

当通过phpMyAdmin运行时,上面的查询可以工作,但当使用上面的代码运行时,它不会返回任何内容(也不会抛出任何错误)。我也尝试过使用未准备好的语句,但得到了相同的空结果。所有函数都返回true,因此不会发生错误。

在准备好的语句中,您不将值放入查询中,而是稍后绑定它们。

在PHP中,将查询更改为:

SELECT COUNT(*) as count,name FROM schedules WHERE position = ? GROUP BY name ORDER BY count DESC";

然后在if ($result = $mysqli->prepare($qstring)) {下面添加:

$result->bind_param('s', $var);
$var = 'test';
根据Joe Rose的回复,我做了他建议的修改,但这还不够。

我的初始代码有两个问题。主要问题是php文件编码。由于我使用硬编码字符串进行测试,我忘记将文件编码更改为UTF-8,并且由于我在字符串中使用瑞典语特殊字符,这导致了未经处理的崩溃,因此结果为空。更改编码并重新保存php文件解决了这个问题。

此外,我上面的代码不会返回预期的结果。这是我的最后一个代码,它工作正常,并返回预期的结果:

$qstring = "SELECT COUNT(*) as count,name FROM schedules WHERE position = ? GROUP BY name ORDER BY count DESC";
        if ($result = $mysqli->prepare($qstring)) {
            $var = 'test';
            $result->bind_param('s', $var);
            /* execute query */
            $result->execute();
            $result =  $result->get_result();
            /* fetch value */
            while ($row = $result->fetch_assoc())
            {
                echo $row['count'] ," ", $row['name'],"<br>";
            }
            /* close statement */
            $result->close();
        }