Получил следующий простой запрос, который отлично работает через 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. Кажется, что при выполнении первой части запроса возвращенные результаты пустые, поэтому дается логическая ошибка. Я предполагаю, что мне нужно пропустить первый набор результатов, но я не знаю, как это сделать?
Это потому, что функция mysql_query
принимает только один запрос, но вы дали ему два, разделенные точкой с запятой. Попробуйте либо:
Выполнение каждого запроса отдельно (не знаю, будет ли это работать):
mysql_query( "SET @N=-1" ); mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
Использование 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.