使用php避免多个MySql查询

时间:2013-08-12 02:30:25

标签: php mysql web

我正在尝试从数据库中选择总数和有限数量的产品。

示例:

$result = $database->query("SELECT* FROM products WHERE type = $category limit $start,$per_page");

$all_data = $database->query("SELECT* FROM products WHERE type = $category");

然而,当我运行这个时,我收到了mysql错误。 是否有可能在不使用多个查询的情况下获取所需数据。

这是我得到的mysql错误;

数据库失败...您的SQL语法出错了;检查与MySQL服务器版本对应的手册,以便在第1行的“-2,2”附近使用正确的语法

4 个答案:

答案 0 :(得分:0)

如果我理解正确,您将在第二个查询中获取您的类别中的整个产品集,但在第一个查询中仅获取一个页面的价值(例如,项目10到19)。我只是用第二个查询获取所有项目,然后将行加载到PHP数组中并使用array_slice()来获取当前页面所需的数组段。

编辑:正如其他人所说,实际的MySQL错误可能是SELECT*之间的空间不足,但你也可以做你想做的事情而不需要点击数据库两次。

答案 1 :(得分:0)

如果您只需要计数,请使用:

SELECT count(*)
FROM products
WHERE type = '$category' limit $start,$per_page");

SELECT count(*)
FROM products
WHERE type = '$category';

答案 2 :(得分:0)

错误是由于在limit子句中使用负数。来自MySQL documentation on Select syntax的代码段:

  

LIMIT子句可用于约束返回的行数   通过SELECT语句。 LIMIT需要一个或两个数字参数,   必须都是非负整数常量(使用时除外)   准备好的陈述)。

因此,如果您真的需要负面限制,那么该错误的解决方案就是使用预备语句,正如@James在您对您的问题的评论中所提出的那样。

请注意,select*不会产生任何错误,但肯定会造成混淆!

答案 3 :(得分:0)

您创建一个过程然后调用此过程。我希望它适合你。

CREATE PROCEDURE `test_proc`()
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
declare name1 TEXT;
declare id1 TEXT;
select name,id into name1,id1 from my_tbl WHERE name='sam';
select * from my_tbl;
select name1,id1;
END

您可以调用此单一调用存储过程。