2011-11-25 68 views
4

我想用下面的代碼設置$nextPageID$nextPageTitle。不幸的是,他們沒有設置。PHP/mySQL:mysql_query SELECT,FROM和WHERE

$pageCategoryID = 1; 
$nextPageOrder = 2; 

$fetchedNextPageData = mysql_query(" 
    SELECT pageID, pageCategoryID, 'order', title 
    FROM pages 
    WHERE pageCategoryID='$pageCategoryID' AND 'order'='$nextPageOrder' 
") or die(mysql_error()); 

      while ($nextPageArray = mysql_fetch_array($fetchedNextPageData)) { 
       $nextPageID = $nextPageArray['pageID']; 
       $nextPageTitle = $nextPageArray['title']; 
      } 

我的表pages包含的pageID = 2,pageCategoryID = 1,爲了= 2,標題=下一頁,加上4個數據的其他列的行我不需要此查詢。

此代碼已被簡化用於測試目的。它在我工作後會被消毒。

有關我能做些什麼來獲得這些代碼的任何想法?

回答

3

忘掉PHP吧。這是你的SQL查詢:

SELECT pageID, pageCategoryID, 'order', title 
FROM pages 
WHERE pageCategoryID='1' AND 'order'='2' 

在SQL中,與許多其他語言一樣,使用引號來鍵入文字字符串。由於'order'字符串永遠不會等於'1的字符串,因此無論其他值如何,您的查詢都會返回零行。

如果order是列名,則不能單引號。

現在,鑑於ORDERreserved word,您必須使用反引號。你也可以輸入整數作爲整數(不需要引用它們):

SELECT pageID, pageCategoryID, `order`, title 
FROM pages 
WHERE pageCategoryID=1 AND `order`=2 
+0

謝謝!這個伎倆。出色的工作解釋它! –

5

要覆蓋變量爲每個記錄,可能創造像

$data = array(); 
while ($nextPageArray = mysql_fetch_assoc($fetchedNextPageData)) { 
    $data[] = array('id' => $nextPageArray['pageID'], 
      'title' => $nextPageArray['title']); 
} 
+0

謝謝你的解決方案。這並沒有解決需要使用反引號和刪除一些單引號的主要問題。就我個人而言,我發現你寫這個的方式需要更多的代碼,而不是很清楚。但是,我仍然對PHP和mySQL不熟悉,也許我會及時看到它。 –

1

在您的查詢的WHERE子句嘗試各地爲了去掉引號和使用回蜱,而不是像這樣的數組:

`order`='$nextPageOrder' 

並儘量避免使用表/列名稱的關鍵字!到過那裏。

+1

我必須在'order'附近有引號,否則我得到一個錯誤。我認爲是因爲它將它作爲'ORDER BY'中的'order'來讀取。 –

+1

@MarkRummel然後你需要反引號,而不是引號 –

+0

添加了後面的勾號。 –

相關問題