запрос node-mysql пытается заменить мои знаки вопроса параметрами против моей воли - PullRequest
3 голосов
/ 20 февраля 2012

Я пытаюсь выполнить простой запрос с node-mysql следующим образом:

client.query("UPDATE mytable SET emote='wtf?' WHERE id=5");

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

Ошибка:дано слишком мало параметров

Поскольку он обнаружил знак вопроса и ожидает параметры.Как, черт возьми, я говорю это игнорировать знак вопроса !?Экранирование с помощью \ не работает.Передача ['?'] в качестве параметра полностью исключена - что если я не знаю количество знаков вопроса, содержащихся в запросе?

В настоящее время я использую обходной путь, которыйподсчитывает количество вопросительных знаков в запросе и передает это количество вопросительных знаков в качестве параметров.Но что, если бы я действительно нуждался в параметрах для того, что они должны были сделать?Я дрожу при мысли.

Итак, подведем итог - Как мне сказать client.query() игнорировать вопросительные знаки?

Ответы [ 3 ]

1 голос
/ 20 февраля 2012

Используйте это:

client.query('UPDATE mytable SET emote=? WHERE id=5', ['wtf?']);

Редактировать:

Передача ['?'] В качестве параметра полностью исключена - что, если я не знаюколичество вопросительных знаков, содержащихся в запросе?

Я пропустил это.Почему бы вам не знать, сколько вопросительных знаков содержится в запросе?Почему у вас есть неизвестный запрос с вопросительными знаками?

1 голос
0 голосов
/ 22 марта 2012

Когда я пытаюсь воссоздать ваш сценарий, повторное использование одинарных кавычек вызывает проблему:

client.query('UPDATE mytable SET emote='wtf?' WHERE id=5');

В частности, я вижу «SyntaxError: Неожиданный идентификатор» при попытке запустить экземпляр Node.

Однако я могу нормально выполнить эквивалентный запрос, когда я переключаю внешние кавычки на двойные, например:

mysql.query("SELECT * FROM stories WHERE title='Test?'");

Для сравнения, это параметризованная версия моегозапрос:

mysql.query('SELECT * FROM stories WHERE title=?',[req.params.title]);
...