Ошибка при использовании пользовательских переменных в запросе MySQL через libmysqlclient - PullRequest
0 голосов
/ 14 марта 2020

Запрос SET @t=NOW(); INSERT INTO tests(posted) VALUES(@t); из кода C ++ (libmysqlclient) приводит к следующему сообщению:

В синтаксисе SQL произошла ошибка; обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с «INSERT INTO tests (posts) VALUES (@t)» в строке 1

Но запрос работает нормально с консоли или Heidi SQL.

Таблица «тесты»:
'id' int(10) unsigned NOT NULL AUTO_INCREMENT, 'posted' datetime NOT NULL, PRIMARY KEY ('id')

main. cpp

#include <cstdio>
#include "sqldb.h"

int main(int argc, char** argv) {
    MySQLClient DB;

    if (!DB.Connect("192.168.1.254", "test", "testpass")) {
        printf("MySQL: %s\n", DB.Error());
        return 1;
    }
    if (!DB.UseDB("test")) {
        printf("MySQL: %s\n", DB.Error());
        return 2;
    }
    if (!DB.Query("SET @t=NOW(); INSERT INTO tests(posted) VALUES(@t);")) {
        printf("MySQL: %s\n", DB.Error());
        return 3;
    }
    return 0;
}

Функция «Запрос»

bool MySQLClient::Query(const char * statement) {
    if (!ctx || !statement) return false;
    unsigned long length = 0;
    while(statement[length]) ++length;
    return !mysql_real_query(static_cast<MYSQL*>(ctx), statement, length);
}

Почему `libmysqlclient не может обработать этот запрос?

1 Ответ

1 голос
/ 14 марта 2020

CLIENT_MULTI_STATEMENTS позволяет mysql_query () и mysql_real_query () выполнять строки операторов, содержащие несколько операторов, разделенных точками с запятой.

    mysql_real_connect(mysql, server, username, password, db, 0, NULL, CLIENT_MULTI_STATEMENTS);

несколько запросов с mysql_query в проекте c ++

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