当我点击第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";
}
}
我认为这可能与此有关,因为如果我将组表添加到查询中,通过在SELECT
子句后添加group.group_id, group_name
,在WHERE
子句后添加group.group_id = product_group_id
,我会得到以下错误:
错误:您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,了解在"组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语法有错误;在第1行的"ORDER BY company.co_name ASC,product.prod_name ASC LIMIT 5,5"附近,查看与MySQL服务器版本对应的手册,以获得正确的语法
这对这个问题有进一步的了解吗?
更新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>';
它解决了我所有的问题!
谢谢你们,设计师很难像程序员那样思考编程,你们真的为我节省了很多天,太棒了!
group是一个保留字,这就是它会抱怨的原因。试着用引号将其引用为group
。
试试这个:
$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";
您得到Warning:mysqli_query()[function.mysqli query]错误的原因是因为查询在if
块中,而mysql_query()
在外部。
因此,我猜测无论是否定义了$q
,都会调用mysql_query()
。因此,当它没有定义时,您将获得Warning: mysqli_query() [function.mysqli-query]: