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

Получил следующий простой запрос, который прекрасно работает через 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. Кажется, что при выполнении первой части запроса возвращаемые результаты пусты, поэтому выдается логическая ошибка. Я думаю, мне нужно пропустить первый набор результатов, но я не знаю, как это сделать?

Ответы [ 2 ]

2 голосов
/ 04 августа 2009

Это потому, что функция 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);
}
0 голосов
/ 04 августа 2009

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

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