2012-04-25 25 views
-1

這行代碼有什麼問題?獲取我的查詢錯誤

$query= "SELECT status FROM follow WHERE user_id1= $COOKIE['user_id'] AND user_id2= 
$user_id"; 

我不斷收到錯誤消息:

解析錯誤:語法錯誤,意想不到的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING

+0

試試'echo $ query'。它可能會提示問題是什麼。 – 2012-04-25 17:31:10

+1

你聽說過小鮑比桌嗎? http://bobby-tables.com/ – 2012-04-25 18:45:12

+1

「這行代碼有什麼問題?」?哦,非常,非常非常。 – Andrew 2012-04-26 21:11:44

回答

-2

試試這個

$query= "SELECT status FROM follow WHERE user_id1 = {$_COOKIE['user_id']} 
AND user_id2 = {$user_id}"; 

What is wrong with this line of code?

基本上,你有一個陣列$COOKIE,我相信這是我假設你正在訪問的是$_COOKIE,但由於它被封裝在一個字符串中,所以你需要幫助PHP的解析器指出是的,它實際上是一個變量(數組),而不是字符串的一部分。要做到這一點,當在「字符串」中使用它們時,應該將變量封裝在{$like_this}左右;

4

您的解決方案容易受到SQL注入的影響;如果我的cookie的用戶ID是1; drop table follow; --,會發生什麼情況?告別你的追隨表。

您至少需要使用mysql_real_escape_string()(編輯:並在插值變量周圍加引號),詳情請參閱this page。但你真的想要prepared statements

+0

他們需要使用mysql_real_escape_string()的任何理由? – 2012-04-25 18:48:24

+4

因爲將原始用戶提供的數據插入到SQL查詢中是錯誤的。 – Venge 2012-04-25 18:51:37

+1

這幾乎就像mysql_real_escape_string被設計爲在將它們傳遞給MySQL之前轉義字符串一樣! – Venge 2012-04-25 18:55:25

-4

單引號分隔數組鍵導致此錯誤
或者省略字符串中的這些引號或使用大括號。

你也必須確保你的價值觀是進入查詢正確的格式

$user_id1 = (int)$COOKIE['user_id']; 
$user_id2 = (int)$user_id; 
$query="SELECT status FROM follow WHERE user_id1=$user_id1 AND user_id2=$user_id2"; 
+1

如果用戶標識不是int,該怎麼辦? – Venge 2012-04-25 19:44:52

+0

@帕特里克哦。你確定這對你很重要嗎? :) – 2012-04-25 20:01:29

+0

*嘆息*這至少比'mysql_real_escape_string'更正確。 – Ryan 2012-10-30 02:36:20

3

不能使用引號的字符串數組裏面的鍵。您必須使用{...}語法,或跌落引號(這將發出一個警告一個字符串,但你知道,PHP)

每個人都堅持使用mysql_real_escape_string是正確的,每個人都堅持使用PDO與準備好的聲明遠遠更正確。

+1

大家都堅持使用mysql_real_escape_string是IN-friggin正確的並且沒有任何線索。 – 2012-04-25 18:59:18