Как использовать оператор IF EXISTS в узле MySQL? - PullRequest
1 голос
/ 21 мая 2019

Я использую NodeJs модуль mysql, и я хочу проверить существование учетной записи, прежде чем фактически запрашивать пароль.

Вот sql:

let sql = `IF EXISTS (SELECT name FROM users WHERE name='${data.name}') SELECT password FROM users WHERE name='${data.name}'`;

Работает нормально, когда оператор if if икак только IF EXISTS часть добавлена ​​в него, независимо от того, что я настраиваю, всегда получаю ошибку как:

code: 'ER_PARSE_ERROR',

errno: 1064,

sqlMessage:
   '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...,

sqlState: '42000'

Я буду признателен, если кто-нибудь может мне помочь!

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Во-первых, ваш SQL - это открытое внедрение SQL.Используйте подготовленные утверждения или, по крайней мере, сделайте несколько попыток очистить ваши входные данные.

Это, кстати, неправильный способ действий.Вы должны просто проверить пароль - и проверить, вернули ли вы какие-либо строки:

let sql = 'SELECT password FROM users WHERE name='${data.name}';

Затем выполните SQL и проверьте, вернули ли вы какие-либо строки.Если да, то прочитайте пароль, иначе это имя пользователя не существует.

0 голосов
/ 21 мая 2019

Вы не используете правильный синтаксис SQL, используйте этот.

SELECT IF( EXISTS(SELECT name FROM users WHERE name='${data.name}'), (SELECT password FROM users WHERE name='${data.name}') , NULL)
...