分页只显示产品的第一页;在第1页之后,获取“警告:mysqli_query():空查询”错误

时间:2011-06-18 19:10:22

标签: php mysql pagination limit

当我点击第1页后面的下一个链接或任何页面时,我收到以下错误:

  

警告:mysqli_query()[function.mysqli-query]:空查询

我目前正在尝试按group_id查看产品,这是我的查询:

if (isset($_GET['grpid']) && is_numeric($_GET['grpid']) ) {
$grpid = (int) $_GET['grpid'];
if ($grpid > 0) { // Overwrite the query:
$q = "SELECT company.co_id, co_name, category.cat_id, cat_name, prod_name, prod_desc, prod_tag, prod_id, prod_img FROM company, product, category WHERE company.co_id = product.co_id AND category.cat_id = product.cat_id AND product.group_id = $grpid ORDER BY company.co_name ASC, product.prod_name ASC";
}

}

我认为这可能与此有关,因为如果我将组表添加到查询中,则在group.group_id, group_name子句之后添加SELECT,在group.group_id = product_group_id之后添加WHERE {1}}子句,我收到以下错误:

  

错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'group WHERE

附近使用正确的语法

我希望我已经提供了足够的信息,我的数据库是4个表:

product
  prod_id
  co_id
  cat_id
  grp_id
  prod_name
  prod_tag
  prod_desc
  prod_img
company
  co_id
  co_name
  co_img
grp
  grp_id
  grp_name
category
  cat_id
  cat_name

更新

确定我的查询就是这样:

if (isset($_GET['grpid']) && is_numeric($_GET['grpid']) ) {
$grpid = (int) $_GET['grpid'];
if ($grpid > 0) { // Overwrite the query:
$q = "SELECT company.co_id, co_name, grp.grp_id, grp_name, category.cat_id, cat_name, prod_name, prod_desc, prod_tag, prod_id, prod_img FROM company, product, category, grp WHERE company.co_id = product.co_id AND category.cat_id = product.cat_id AND product.grp_id = $grpid ORDER BY company.co_name ASC, product.prod_name ASC LIMIT $start, $display";
}

}

然后紧接着:

$r = mysqli_query($dbc,$q) or die("Error: ".mysqli_error($dbc));

错误指向哪一行:

  

警告:mysqli_query()[function.mysqli-query]:

中的空查询

恐怕我不知道如何打印出来的sql并将其直接送回来?

如果我不使用分页,那么所有预期的产品都会显示;当我在第一页以外的任何页面上时,会出现问题。

更新2

如果我通过注释掉它周围的if标记来设置要运行的查询,则错误消息会更改为:

  

错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第1行的'ORDER BY company.co_name ASC,product.prod_name ASC LIMIT 5,5'附近使用正确的语法

这是否会对这个问题有所了解?

更新3 - 解决了!

最后简单的简单问题,非常感谢BugFinder和其他让我的大脑正确思考问题的人。

问题是我在创建url时没有将变量传递到相应的页面,它显示为:

echo '<a href="browse_products.php?&s=' . ($start + $display) . '&p=' . $pages . '">Next</a>';

但是通过添加“grpid = 1”来使其读取:

echo '<a href="browse_products.php?grpid=1&s=' . ($start + $display) . '&p=' . $pages . '">Next</a>';

它解决了我所有的问题!

谢谢你,设计师很难想象程序员的编程方式,你几乎每天都在拯救我,很棒的东西!

3 个答案:

答案 0 :(得分:1)

组是一个保留字,这就是为什么它会抱怨。尝试使用引号将其引用为group

答案 1 :(得分:1)

试试这个:

$q = "SELECT c.co_id, c.co_name, cat.cat_id, cat.cat_name, p.prod_name, p.prod_desc, p.prod_tag, p.prod_id, p.prod_img FROM company AS c, product AS p, category AS cat WHERE c.co_id = p.co_id AND cat.cat_id = p.cat_id AND p.group_id = $grpid ORDER BY c.co_name ASC, p.prod_name ASC";

答案 2 :(得分:1)

您收到警告的原因:mysqli_query()[function.mysqli-query]错误是因为查询位于if块中且mysql_query()在外面。

因此我猜测mysql_query()是否被定义$q。因此,当未定义时,您将获得Warning: mysqli_query() [function.mysqli-query]: