2013-09-27 51 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."'" 

您只需在...中为每个表格添加所需的其余列。

如果您有其他具有相同名称的列,请不要忘记为它们创建别名。