2012-08-11 78 views
0

將連接此查詢的正確方法是什麼?連接查詢內部的變量

$query2= "SELECT * FROM relationships WHERE user_1= '.$_SESSION['user_id'].'  
AND user_2= '.$user_id.' "; 

我不斷收到此錯誤:

解析錯誤:語法錯誤,意想不到的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING在C:上線\ XAMPP \ htdocs中\測試\ profile.php 32

+0

請自己幫忙,並通過使用參數化查詢而不是連接字符串來防止可能的sql注入。通過連接未轉義的字符串,在有人竊取,修改或刪除所有數據之前,只是一個時間問題。這是一場等待發生的災難。 http://stackoverflow.com/a/60496/36866 – some 2012-08-12 01:45:39

回答

2

單引號和雙引號的嵌套不正確。

$query2= "SELECT * FROM relationships WHERE user_1= '" . $_SESSION['user_id'] . "' AND user_2= '" . $user_id . "'"; 
+0

非常感謝! – Matt 2012-08-11 21:20:22

+0

這是一個不好的答案。昆汀的是正確的。 – Alnitak 2012-08-11 21:20:37

+0

這是正確的答案。問題是關於字符串連接,它並不徵求關於如何訪問數據庫的意見。 – meagar 2012-08-11 21:21:40

5

What would be the proper way to concatenate this query?

爲了讓你的SQL庫/客戶機/服務器爲你做它(而逃避特殊字符免費)。試圖通過將字符串混合在一起來構建代碼是相對容易出錯的,並且涉及各種難以維護的引用字符的煩雜組合。

改爲使用prepared statements and bound arguments

+1

,並且在連接字符串時不會忘記SQL注入攻擊的風險...... – Alnitak 2012-08-11 21:21:34

2

或者:

$query2 = "SELECT * FROM relationships WHERE user_1='" . $_SESSION['user_id'] . "'AND user_2='" . $user_id . "'"; 

或者:

$query2 = "SELECT * FROM relationships WHERE user_1='${_SESSION['user_id']}' AND user_2='$user_id'"; 

修復你的語法錯誤。但是,通過串聯形成查詢是一個壞主意。至少,你應該所有的參數都是mysql_realescapestring,如果不移動到使用PDO的話。