2015-02-05 56 views
1

我的腳本被設計用來遍歷環境,點擊數據庫並檢查是否有任何名/姓組合具有關聯的用戶ID。我不知道爲什麼我得到下面列出的錯誤。使用like和%的SQL錯誤

#/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 
[email protected]:~/Desktop$ 
+0

你沒有圍繞'jay''和''lefler''單引號 – paqogomez 2015-02-05 17:09:02

回答

3

我沒那麼熟悉這種類型的腳本,但它似乎對我來說%左右傑伊%和%lefler%,以便SQL作爲在那裏出現將需要語錄:

select user_id from users where first like '%jay%' and last like '%lefler%'; 
+0

那麼需要對我的腳本進行哪些編輯?我知道應該如何使用SQL語句,但我使用的是變量,因此語法不會完全相同。 – user3299633 2015-02-05 17:10:47

+0

我認爲它應該看起來像這樣:''從用戶中選擇user_id,其中第一個像''%{{first_name}%'「,最後像''%$ {last_name}%'」;「'' - 把單引號在百分號之外。不過,我並不熟悉這種腳本,所以這可能是錯誤的。 – Connor 2015-02-05 17:12:56

0

在你的代碼的主要問題是引號的百分號內。 :)

第二個問題是您創建了一些易受SQL注入攻擊的內容。我完全不知道如何從Bash腳本創建綁定參數,但你需要弄清楚!

0

查詢到MySQL應該輸出是這樣的:

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

在bash的並置的方式之一是如下:

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

編輯: 所以結合所有另外做一些事情來擴展''內的字符串。問題是shell無法在單引號之間擴展字符串。 像這樣的東西應該工作:

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

然後在你的連接鏈使用變量CommandFinale

我沒有蜜蜂能夠測試它,但它應該是這樣或非常相似。

+0

這也行不通... – user3299633 2015-02-05 17:39:34

+0

同樣的錯誤還是有點不同?還要對字符串SQL查詢進行「回聲」處理,使其成爲變量並將其回顯,然後將其發佈到此處。只是想看看它創建了什麼鏈。 – wti 2015-02-05 17:41:06

+0

隨着你提到的變化,我得到以下錯誤,而不是:用法:grep [選項] ...模式[文件] ... 嘗試'grep - 幫助'獲取更多信息。 – user3299633 2015-02-05 17:57:42