mysqli multiple query – set variable производит ошибку boolean / как пропустить это?

Получил следующий простой запрос, который отлично работает через phpmyadmin, но когда я добавляю его на свой веб-сайт php, результаты не возвращаются и сообщений об ошибках и предупреждениях тоже нет. Если я удалю «SET @ N = -1;» то он отлично работает.

<?php $db_connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true); mysql_select_db(DB_NAME, $db_connect); $test_query = mysql_query("SET @N=-1;SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`;"); for ($i = 0; $i <= mysql_num_rows($test_query)-1; $i++) { echo mysql_result($db_directorymap, $i, 0) . " " . mysql_result($db_directorymap, $i, 1) . "<br />"; } ?> 

UPDATE: я просто перешел в mysqli, но, конечно, у меня все еще проблема с оператором mysql и mysqli_multi_query. Кажется, что при выполнении первой части запроса возвращенные результаты пустые, поэтому дается логическая ошибка. Я предполагаю, что мне нужно пропустить первый набор результатов, но я не знаю, как это сделать?

Solutions Collecting From Web of "mysqli multiple query – set variable производит ошибку boolean / как пропустить это?"

Это потому, что функция mysql_query принимает только один запрос, но вы дали ему два, разделенные точкой с запятой. Попробуйте либо:

  1. Выполнение каждого запроса отдельно (не знаю, будет ли это работать):

     mysql_query( "SET @N=-1" ); mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" ); 
  2. Использование mysqli с функцией multi_query (или эквивалентом PDO, если таковой имеется).

Чтобы ответить на ваш обновленный вопрос: проверьте страницу руководства PHP для multi_query. Я думаю, вы захотите использовать mysqli::next_result . Что-то вроде этого, используя процедурный стиль:

 mysqli_multi_query($link, $query); mysqli_next_result($link); if ($result = mysqli_store_result($link)) { while ($row = mysqli_fetch_row($result)) { printf("%s\n", $row[0]); } mysqli_free_result($result); } 

Несколько запросов через mysql_query не поддерживаются, поэтому я предполагаю, что он выполняет только команду SET, а не последующую команду SELECT.