查询在phpMyAdmin中工作但在MySQLi

时间:2015-11-06 15:17:46

标签: php 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,因此不会发生错误。

2 个答案:

答案 0 :(得分:0)

在准备好的陈述中,您不要将值放入查询中,而是稍后将其绑定。

在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';

答案 1 :(得分:0)

在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();
        }