LINUX.ORG.RU

Проблема с SQL-запросом в NodeJS

 , ,


0

1

Есть таблица MySQL с сессиями юзеров. Помимо прочего у каждой сессии есть имя пользователя, который её создал и дата истечения. Пользователи могут иметь несколько сессий одновременно, однако их количество ограничено, чтобы нельзя было забить БД постоянно заново авторизуясь. Допустим, количество сессий ограничено 4. В таком случае перед созданием новой сессии я должен оставить в базе не больше 3 сессий этого пользователя. Самое логичное - удалить самые старые сессии.

Я делаю это так:

mysql_conn.query("SET @tmp = (SELECT expire FROM sessions WHERE user_id = ? ORDER BY expire DESC LIMIT 3, 1); DELETE FROM sessions WHERE expire < (@tmp) AND user_id = ?;", [user_id, user_id], function (err, rows) {
...
});

И получаю ошибку:

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 'DELETE FROM sessions WHERE expire < (@tmp) AND user_id = 'test'' at line 1

Если же тупо скопировать этот запрос в phpMyAdmin и запустить там, то он отлично отрабатывает. Я добавлял вызов console.log в саму библиотеку MySQL для NodeJS, чтобы она вывела запрос непосредственно после форматирования, копировал его, вставлял в phpMyAdmin и всё тоже срабатывало нормально.

В чём может быть дело?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от anonymous

Спасибо. Помогло.

Для Ъ:

В драйвере MySQL NodeJS по умолчанию запрещены несколько команд разделённых ; в одном запросе. Чтобы включить поддержку нужно добавить опцию подключения:

var mysql_conn = mysql.createConnection({..., multipleStatements: true});
KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)

У вас в запросе на самом деле два запроса. Попробуйте разбить на части.

vromanov ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.