2012-03-10 56 views
0

我正試圖在PHP中使用一個變量在FQL中設置多重查詢。但我似乎無法讓它正常工作

$fql = '{ 
     "uid" : "SELECT uid FROM user WHERE username = \"$friend\"", 
     "album": "SELECT object_id, link, aid, cover_pid, location, name FROM album WHERE owner IN (SELECT uid FROM #uid)", 
     "photo": "SELECT src FROM photo WHERE pid IN (SELECT cover_pid FROM #album)" 
    }'; 

這基本上是試圖讓你的朋友相冊的封面照片。

如果我將朋友的用戶名直接放在$ friend的位置,我會得到所有的結果,但不會顯示上面的代碼,其中$ friend是動態設置的。

出了什麼問題!! ?? 感謝

+0

請注意,外部引號是''s和* not *'「的s。 – 2012-03-10 04:45:00

回答

2

字符串是PHP不進行評估。在這種情況下,你應該使用點運算符將它們連接起來:

$fql = '{ 
     "uid" : "SELECT uid FROM user WHERE username = \"' . $friend . '\"", 
     "album": "SELECT object_id, link, aid, cover_pid, location, name FROM album WHERE owner IN (SELECT uid FROM #uid)", 
     "photo": "SELECT src FROM photo WHERE pid IN (SELECT cover_pid FROM #album)" 
    }'; 

你應該看看the "PHP bible"

+0

是的。這個工程! – 2012-03-12 05:46:53

+0

Thankyou for yr幫助 – 2012-03-12 05:47:06

0
$text = "85"; 
print "The number is: ".$text."."; 

這將輸出:使用單引號

The number is: 85. 
0

在SQL中,通常所有的varchar都在單引號之間而不是雙引號 您是否試過這個?

"SELECT uid FROM user WHERE username = '" . $friend . "'", 
+0

這仍然不起作用。整個JSON是一個字符串(和在這種情況下單引號)。 – 2012-03-10 04:43:38

1

在PHP中,雙引號字符串中的變量將被求值,而單引號字符串中的變量不會被求值。

你最好的解決方案是反向引號讓你的字符串如下所示:

$fql = "{ 
    'uid' : 'SELECT uid FROM user WHERE username = '$friend', 
    'album': 'SELECT object_id, link, aid, cover_pid, location, name FROM album WHERE owner IN (SELECT uid FROM #uid)', 
    'photo': 'SELECT src FROM photo WHERE pid IN (SELECT cover_pid FROM #album)' 
}"; 

這將導致$friend進行評估,以您的變量的值。

+0

這不是很有效。生成的JSON由於不平衡的引號和「損壞的」引用而圍繞''friend''擺弄,可能只是想吸取它並使用'\'或一個here-doc。 – 2012-03-10 04:49:51