我有一个执行地理空间查询的存储过程。 proc发出两个sql语句,但只有第二个执行查询但不幸的是两个语句都生成了一个结果集。我需要第二个结果集,其中包含实际查询的结果。
第一个语句设置一个边界框:
SET @bbox = 'POLYGON(($polygon))'; \n
SELECT * , AsText( location )
FROM users
WHERE Intersects( location, GeomFromText( @bbox ) ) [snipped for brevity]
如果我在phpMyAdmin中运行上面的内容,它可以工作,但是在发出SET命令之后我得到以下消息,我想把它丢掉:
# MySQL returned an empty result set (i.e. zero rows).
在php方面,我构建了查询字符串,调用存储过程并在返回时,我做的第一件事就是抛弃空结果集。
$query = "CALL usp_queryByPolygon('$polygon', $msg_id, $user_type)";
$result = mysqli_query($cxn, $query) or die("GEOCODE: queryPolygon - " .sql_error());
sql_free_result($result);
丢弃结果集后,我现在需要查询结果,这就是我所做的:
$result = sql_next_result();
当我尝试使用第二个结果集时问题是:
if(mysqli_num_rows($result) > 0)
我收到错误:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given
in /blah/blah/module.php on line 96
为了使事情复杂化,以上所有内容都处于循环中,可能会有数十个或100个多边形要搜索。
所以问题是:获得第二个结果集的正确方法是什么?
答案 0 :(得分:0)
您最好准确了解您执行的功能。 sql_next_result()
不是标准的PHP函数,也不是你似乎使用的MySQLi。如果是某种数据库类,请只显示类使用的方法。这里没有人可以解决sql_next_result()
所做的事情。
假设您正在讨论mysqli_next_result()
,那确实会返回一个布尔值,您需要在此之后调用mysqli_use_result()
以便检索下一个结果集。
答案 1 :(得分:0)
找出两个语句:SET @bbox和SELECT可以顺序执行,所以mysqli和两个结果只是不需要处理的饲料。