MySQL несколько запросов - переменная set выдает логическую ошибку / как это пропустить?

StackOverflow https://stackoverflow.com/questions/1227022

  •  22-07-2019
  •  | 
  •  

Вопрос

Получил следующий простой запрос, который прекрасно работает через 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 />";
}
?>

ОБНОВЛЕНИЕ: я только что перешел на 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.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top