繁体   English   中英

避免使用php进行多个MySql查询

[英]Avoid multiple MySql queries using php

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

例:

$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'附近使用正确的语法

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

编辑:正如其他人所说,实际的MySQL错误可能是SELECT*之间缺少空格,但是您也可以做您想做的事情而无需两次访问数据库。

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

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

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

该错误是由于在limit子句中使用了负数。 MySQL文档中有关Select语法的摘录:

LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量(使用预处理语句时除外)。

因此,解决该错误的方法是,如果您确实需要负限制,请使用准备好的语句,就像@James在他对问题的评论之一中所要求的那样。

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

创建一个过程,然后调用该过程。 希望它对您有用。

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

您可以调用此单个呼叫存储过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM