php mysqli для вызова хранимых процедур, получения результатов - PullRequest
0 голосов
/ 16 ноября 2011

У меня есть сохраненный процесс, который выполняет геопространственный запрос.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

Чтобы усложнить ситуацию, все вышеперечисленное находится в цикле и можетбыть десятками или сотнями полигонов для поиска.

Итак, вопрос в том, как правильно получить этот второй набор результатов?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

Обнаружил два оператора: SET @bbox и SELECT могут выполняться последовательно, поэтому mysqli и два результата - просто корм, с которым не нужно разбираться.

0 голосов
/ 16 ноября 2011

Лучше быть точным, какие функции вы выполняете.sql_next_result() не является стандартной функцией PHP, как и MySQLi, которую вы, похоже, используете.Если это какой-то класс базы данных, пожалуйста, просто покажите методы, которые использует этот класс.Никто здесь не может, кроме как выяснить, что делает sql_next_result().

Если вы говорите о mysqli_next_result(), который действительно возвращает логическое значение, вам нужно позвонить mysqli_use_result() после этого, чтобы получить следующий набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...