使用PHP-MySQLi-Database-Class的SQL SELECT COUNT rawQuery

时间:2015-03-10 19:32:06

标签: php mysql mysqli

我从这里使用mysqli类:https://github.com/joshcam/PHP-MySQLi-Database-Class

...并且遇到了这个rawquery的问题:

    $q = mysql_query("SELECT id, value, (
                              SELECT COUNT( * ) 
                              FROM ".$dbprefix."pages
                              WHERE roles = ".$dbprefix."roles.id
                             )count
                             FROM '".$dbprefix."roles' ORDER by id ASC");
    $result = $db->rawQuery ($q);

它不起作用,我在MysqliDb.php中的第776行准备查询时遇到致命错误 - mysql查询本身有效,但是当我将它与mysqli类一起使用时,它不起作用。我相信它与COUNT(*)或条带标签或......有关。我尝试了几件事,但我坚持了下来。也许我不是唯一有这个问题的人 - 也许有人可以帮帮忙?这太好了!谢谢你的建议!

1 个答案:

答案 0 :(得分:1)

由于您使用的是PHP-MySQLi-Database-Class,因此无需手动处理表前缀 - 只需将其设置为$db->setPrefix(...)

当您选择的图书馆直接执行此操作时,请不要mysql_query(...)(已弃用!)。 rawQuery()正在查找带有SQL查询的字符串,而不是mysql_query()返回的语句。

最后,尽可能避免子查询并替换为各种类型的JOIN - 性能更好,可读性更好。一般来说,人们过度使用子查询 - 习惯于在被子查询诱惑时尝试找出JOIN解决方案。有时你必须使用子查询,但大多数时候不是......

$db->setPrefix ($dbprefix);

$sql = "SELECT id, value, COUNT(pages.roles) AS c
        FROM roles
        LEFT JOIN pages ON pages.roles = roles.id
        ORDER by id ASC"
$result = $db->rawQuery($sql);