2013-09-27 52 views
0

使用PHP共享的參數,我下面的查詢:獲取在連接查詢

"SELECT * 
FROM `items` 
     JOIN `categories` 
     ON `items`.`category`=`categories`.`cat3` 
WHERE `items`.`user_id` = '".$UID."'" 

我試圖訪問items。來自關聯數組的id字段。問題是,$res['id']似乎給了我categories表的ID。

如何更改代碼以獲取items表中的ID?

+0

**通過構建帶有外部變量的SQL語句,您將使自己對SQL注入攻擊敞開大門。**此外,任何帶有單引號的輸入數據(如名爲「O'Malley」)將炸燬你的SQL查詢。請了解使用參數化查詢(最好是使用PDO模塊)來保護您的Web應用程序。 http://bobby-tables.com/php有例子讓你開始,並且[這個問題](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php)有很多例子的細節。 –

+0

對於未來的代碼:你不需要引用/反引用你的專欄和表名。它們只會增加視覺混亂,並且只是讓語法錯誤發生的另一種方式。你需要他們的唯一原因是,如果你的名字是一個保留字,或者你在其中嵌入了空格或標點符號,並且這些是可怕的做法以避免。 –

+0

@AndyLester謝謝,但我採取了'$ UID'的預防措施,以確保查詢是安全的。我更喜歡反引號,因爲我通常寫非常線性的查詢。 –

回答

1

在你的sql語句中添加一個額外的列,例如。

SELECT *, 
     items.id AS `itemID` 
FROM .... 

和訪問它喜歡,

$res['itemID'] 
0

你從兩個表itemscategory選擇每一列。這會讓您在訪問兩個表上具有相同名稱的列時遇到問題。

在這些情況下,您應該始終在您的select語句中使用aliases

SELECT `items`.`id` as item_id,...,`categories`.`id`,... 
FROM `items` 
     JOIN `categories` 
     ON `items`.`category`=`categories`.`cat3` 
WHERE `items`.`user_id` = '".$UID."'" 

您只需在...中爲每個表格添加所需的其餘列。

如果您有其他具有相同名稱的列,請不要忘記爲它們創建別名。