我有两个问题,如下:
SELECT SQL_CALC_FOUND_ROWS Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10;
SELECT FOUND_ROWS();
我想在一次尝试中执行这两个查询。
$result = mysql_query($query);
但请告诉我如何分别处理每一张table。实际上,在asp.net中,我们使用数据集作为
ds.Tables[0];
ds.Tables[1]; .. etc
如何使用php/mysql实现同样的功能?
8条答案
按热度按时间jpfvwuh41#
使用
SQL_CALC_FOUND_ROWS
你不能。通过found\u rows()可用的行计数是暂时的,不适用于select sql\u calc\u found\u rows语句后面的语句。
正如有人在你之前的问题中提到的,使用
SQL_CALC_FOUND_ROWS
通常比仅仅得到一个计数要慢。也许您最好将此作为子查询:
uplii1fm2#
它在php站点上说不允许多个查询(edit:这只适用于mysql扩展。mysqli和pdo允许多个查询)。所以你不能用php来实现,但是,为什么不能在另一个mysql\u查询调用中执行这个查询呢(比如jon的例子)?如果您使用相同的连接,它仍应提供正确的结果。另外,mysql\u num\u行也可能有帮助。
qyzbxkaa3#
你必须使用mysqli,下面的代码工作得很好
tcbh2hod4#
这样地:
piah890a5#
是的,不使用mysqli扩展也是可能的。
简单使用
CLIENT_MULTI_STATEMENTS
在mysql_connect
的第五个论点。有关更多信息,请参阅husni帖子下面的评论。
pdkcd3nj6#
正如其他人所回答的,mysqli api可以使用msyqli\u multi\u query()函数执行多个查询。
值得一提的是,pdo默认支持多查询,您可以迭代多个查询的多个结果集:
然而,出于安全考虑,多查询被广泛认为是一个坏主意。如果您对如何构造查询字符串不小心,实际上可以得到典型的“小bobby表”xkcd动画中所示的sql注入漏洞的确切类型。当使用一个api将您限制为单个查询时,这是不可能的。
6tqwzwtp7#
更新:显然可以通过传递一个标志给
mysql_connect()
. 请参阅使用php在一条语句中执行多个sql查询。尽管如此,任何当前读取器都应避免使用mysql_
-函数类和pdo。在php中使用常规mysql api无法做到这一点。只需执行两个查询。第二个会很快,没关系。这是一个典型的微观优化例子。别担心。
对于记录,可以使用mysqli和mysqli\u multi\u query-function来完成。
icomxhvb8#
如果不想执行两次查询,则必须使用mysqli扩展: