Ошибки SQL с использованием лайков и%

1

Мой скрипт предназначен для циклического перехода по средам, попадания в базу данных и проверки наличия связанного с ним имени пользователя/фамилии. Я не уверен, почему я получаю ошибку, указанную ниже.

#/bin/bash

#specify user to search for  *******DO NOT PUT SPACE, ie. jaylefler
echo "Please enter user first name: "
read first_name

echo "Please enter user last name: "
read last_name

echo "Please enter LDAP User ID: "
read ldapuser

echo "Please enter LDAP password: "

stty -echo

read ldappw

stty echo
#logs to write output to
log="ui_${username}_access.log"
finallog="${username}_ui_access.txt"

#create file if not exist, else null it
[[ -f ${log} ]] && cat /dev/null > ${log} || touch ${log}
[[ -f ${finallog} ]] && cat /dev/null > ${finallog} || touch ${log}

#log it all
{

echo "environment"
sshpass -p $ldappw ssh [email protected] 'mysql -h host -u user -    ppassword database -e \
"select user_id from users where first like "%'${first_name}'%" and last like "%'${last_name}'%";"'


} > $log

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

Please enter user first name: 
jay
Please enter user last name: 
lefler
Please enter LDAP User ID: 
jlefler
Please enter LDAP password: 
ERROR 1064 (42000) at line 1: 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 '%jay% and last like %lefler%' at line 1
jlefler@ubuntu:~/Desktop$ 
  • 0
    у вас нет одинарных кавычек вокруг 'jay' и 'lefler'
Теги:

3 ответа

3

Я не знаком с этим типом сценариев, но мне кажется, что вокруг% jay% и% lefler% должны быть цитаты, чтобы SQL выглядел как:

select user_id from users where first like '%jay%' and last like '%lefler%';
  • 0
    Итак, какие изменения необходимо внести в мои сценарии? Я понимаю, как использовать оператор SQL, но я использую переменные, поэтому синтаксис не будет таким же.
  • 0
    Я считаю, что это должно выглядеть следующим образом: "select user_id from users where first like "'%${first_name}%'" and last like "'%${last_name}%'";"' - помещая одинарные кавычки за пределы знаки процента. Я не знаком с этим типом сценариев, так что это может быть неправильно.
0

Запрос MySQL должен выводить примерно так:

SELECT * FROM pet WHERE name LIKE '%w%';

В bash один из способов конкатенации заключается в следующем:

mystring="some ${string1} arbitrary ${string2} text"

РЕДАКТИРОВАТЬ: Таким образом, объединение всех Плюсов делает что-то, чтобы расширить строки внутри ''. Проблема в том, что оболочка не может расширять строки между одиночными кавычками. Что-то вроде этого должно работать:

CommandFinale=$($sqlCommand -e "select user_id from users where first like '%${first_name}%' and last like '%${last_name}%';") 

Затем используйте переменную CommandFinale в цепочке соединений.

Я не могу проверить его, но это должно быть так или очень похоже.

  • 0
    Это тоже не работает ...
  • 0
    Та же ошибка или немного другая? Также сделайте echo строкового запроса SQL, сделайте его переменной и повторите его, а затем опубликуйте здесь. Просто чтобы увидеть, какую цепочку он создает.
Показать ещё 8 комментариев
0

Основная проблема в вашем коде заключается в том, что кавычки находятся внутри знака процента. :)

Вторая проблема заключается в том, что вы создали нечто уязвимое для SQL-инъекции. Я не знаю, как создавать связанные параметры из сценария Bash, но вам нужно это понять!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню