我从这里使用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(*)或条带标签或......有关。我尝试了几件事,但我坚持了下来。也许我不是唯一有这个问题的人 - 也许有人可以帮帮忙?这太好了!谢谢你的建议!
答案 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);