php mysqli调用存储过程,得到结果

时间:2011-11-16 13:10:57

标签: php mysql mysqli

我有一个执行地理空间查询的存储过程。 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个多边形要搜索。

所以问题是:获得第二个结果集的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您最好准确了解您执行的功能。 sql_next_result()不是标准的PHP函数,也不是你似乎使用的MySQLi。如果是某种数据库类,请只显示类使用的方法。这里没有人可以解决sql_next_result()所做的事情。

假设您正在讨论mysqli_next_result(),那确实会返回一个布尔值,您需要在此之后调用mysqli_use_result()以便检索下一个结果集。

答案 1 :(得分:0)

找出两个语句:SET @bbox和SELECT可以顺序执行,所以mysqli和两个结果只是不需要处理的饲料。