2012-08-04 122 views
0

即時通訊新的PHP和我的SQL試圖從這個表中獲得所有的結果,如果沒有選擇,但由於某種原因,它總是顯示一個結果。任何IDE爲什麼查詢錯誤MySQL的php

$query = "SELECT *, ROUND(AVG(d.rating),0) FROM restaurant AS r, review AS d WHERE 1=1 "; 
if($vicinity) $query .= "AND r.vicinity=\"$vicinity\" "; 
if($cuisine) $query .= "AND r.cuisine=\"$cuisine\" "; 
if($price) $query .= "AND r.price=\"$price\""; 
if($name) $query .= "AND r.name LIKE \"%$name%\""; 
$result = mysql_query($query); 

while($row = mysql_fetch_array($result)) { 

和IM只獲得在桌子上

+2

請仔細閱讀準備好的陳述 – Kurt 2012-08-04 05:11:08

+0

您需要展示如何顯示結果。這可能是因爲你沒有正確地循環訪問'$ result'數組。 – mithilatw 2012-08-04 05:11:16

+0

1.使用預先準備好的語句,如Prowla所說的,2. SQL中的字符串文字被單引號包圍,而不是雙引號。 – bdares 2012-08-04 05:13:28

回答

0

嘗試的第一個項目使用prepared statements和得到的結果,並使用迭代器來解析和在循環中會得到打印。另見this tutorial

+0

我不熟悉準備好的聲明它們是如何工作的? – JProg 2012-08-04 05:20:38

+0

http://php.net/manual/en/pdo.prepared-statements.php – sunmoon 2012-08-04 05:37:05

+0

http://www.phpeveryday.com/articles/PDO-Prepared-Statement-P550.html – sunmoon 2012-08-04 05:37:26

0

我會親自調查PDO。你可以在手冊here中找到很多關於它的信息。

0

猜測你只能得到一個結果,因爲平均呼叫沒有一個組觸發一些有趣的行爲。嘗試添加一個羣組,我猜你還想通過連接關聯餐館和評論。例如:

$query = "SELECT *, ROUND(AVG(d.rating),0) FROM restaurant AS r LEFT JOIN review AS d on r.id = d.restaurant_id WHERE 1=1"; 
... 
... 
$query .= ' GROUP BY r.id'; 
$result = mysql_query($query); 

每個線程,聽起來像你應該看準備好的語句以及:)。和SELECT *應該也可能只是SELECT r.* - 作爲*評分結果的一部分返回的數據將不會有意義,因爲r。*和round(avg(d.rating),0)值應該是雖然)