Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Ошибка при двойном запросе в MySQL в Си


Автор: Calligraff 15.9.2017, 09:44
Добрый день.
Столкнулся с проблемой следующего характера:
Есть код:
Код

    char sql_query[2048];
    sprintf(sql_query, "SELECT @s_id:=sender_id FROM `data` WHERE `status`=1 ORDER BY `created` ASC LIMIT 1; " \
                       "SELECT * FROM `data` WHERE `sender_id`=@s_id ORDER BY `created`;");
    if ( mysql_query(conn, sql_query) == 0 )
    {
        _Log.write(nLOG_INFO, "I feel good!");
    } else {
        char err_text[1024];
        sprintf(err_text, "Error MYSQL query: %s", mysql_error(conn));
        _Log.write(nLOG_ERROR, err_text);
        return -1;
    }


но компилятор ругается следующими матерными словами:
Код

Error MYSQL query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `data` WHERE `sender_id`=@s_id ORDER BY `created`' at line 1


при попытке выполнить данный запрос в интерфейсе PHPMyAdmin - все пучком!

По отдельности SELEC`ты выполняются без проблем в Си.

О среде:
Linux mint
Eclipse C/C++

Цель запроса получить все записи из таблицы, у которых sender_id = <sender_id первой строки результата запроса>

Помогите люди добрый пожалуйста!

Автор: Calligraff 15.9.2017, 09:46
Вот сама таблица:

Автор: xvr 15.9.2017, 16:27
У вас ругается не компилятор, а MySQL база. Видимо ей не нравится @s_id (или в первом select или во втором)
Скормите запрос в сервер через его родной клиент (командной строки или https://www.mysql.com/products/workbench/)

Цитата

Цель запроса получить все записи из таблицы, у которых sender_id = <sender_id первой строки результата запроса>
Это можно сделать через вложенный SELECT , без всяких переменных. И даже через обычный реляционный SELECT (один единственный)


Автор: tzirechnoy 18.9.2017, 21:15
Не нравится ей несколько запросов в mysql_query. Эта функцыя посылает текст запроса цэликом на сервер, и такой синтаксис нескольких запросов (с ; ) не поддержывается.

Добавлено через 45 секунд
Не нравится ей несколько запросов в mysql_query. Эта функцыя посылает текст запроса цэликом на сервер, и такой синтаксис нескольких запросов (с ; ) не поддержывается.

Автор: xvr 19.9.2017, 08:58
С некоторой версии MySQL поддерживается, но надо указать какой то флаг при инициализации (IMHO)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)