У меня есть сохраненный процесс, который выполняет геопространственный запрос.Proc выдает два оператора sql, но только 2-й оператор выполняет запрос, но, к сожалению, оба оператора выдают набор результатов.Мне нужен второй набор результатов, который содержит результаты фактического запроса.
Первый оператор устанавливает ограничивающий прямоугольник:
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
Чтобы усложнить ситуацию, все вышеперечисленное находится в цикле и можетбыть десятками или сотнями полигонов для поиска.
Итак, вопрос в том, как правильно получить этот второй набор результатов?