3

我有一个使用 3 个表的连接的 SQL 查询。它实际上工作正常,但是所有三个表都有一个名为“id”的字段,所以稍后当我尝试访问 id 字段时,它只访问最后一个字段中的那个。SQL查询如下:

"SELECT * FROM professors AS p 
            JOIN schools_professors AS sp 
            ON p.school_id = sp.id
            JOIN schools AS s ON sp.school_id = s.id  WHERE p.first_name LIKE '%".
                $search."%' OR p.last_name LIKE '%".$search.
                "%' LIMIT 0, 10;"

现在,学校、教授和学校教授,都有 id 列。我如何访问教授的 ID?这是我唯一关心的一个。

4

1 回答 1

5

在这种情况下,您不应该使用*,而是手动投影列名并在其上添加一个ALIAS。例子,

SELECT   ....,
         p.ID AS ProfessorID,
         s.ID AS SchoolID,
FROM     .....

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-14T05:50:07.543 回答