2013-04-24 144 views
-3

好家伙,这是我的SQL查询:连接两个表在MySQL

SELECT * 
FROM path JOIN (
    SELECT * FROM invoice WHERE client_Id='$_SESSION[user]' 
) ON INVOICE.path_Id=PATH.Id 

我想加入的第一个表中的两个表必须具有client_Id=$_SESSION[user]。这两张桌子必须加入path_Id。请帮助我以正确的方式编写此查询。谢谢

回答

1

尝试此查询

SELECT * 
FROM `PATH` JOIN `INVOICE` 
    ON `INVOICE`.`path_Id`=`PATH`.`Id` 
WHERE `INVOICE`.`client_Id`='$_SESSION[user]' 
1

有这么多的事情错在该行的代码:

  1. Saintize用户输入。通过将$ _SESSION变量直接插入到 SQL查询中,您将引入SQL注入漏洞,沿 引入XSS和CSRF漏洞。如果有机会,人们可以并且会为您的应用程序做一些令人讨厌的事情 。

  2. 千万不要选择超出您需要的数据。你真的需要 这两个表中的所有列吗?

  3. 为什么选择两个? A SELECT * FROM Path p JOIN Invoice i ON i.path_id = p.id WHERE i.client_id = 1 LIMIT 1将完成这项工作。

+1

XSS和CSRF(XSRF)是不同的。 – Lion 2013-04-24 00:41:39

+0

@Lion你是对的,我提到了XSRF,因为如果他与数据库中的“原始”用户输入相匹配,那么很可能是他没有重新生成会话ID,也没有跟踪用户会话中的唯一ID;所以对他的应用程序执行XSRF攻击会相对容易。 – ILikeTacos 2013-04-24 00:49:22

+0

在CSRF攻击中,攻击者通常会玩游戏,用户拥有已存储在其(用户)浏览器中的经过验证的Cookie。当网站不认识到请求来自**授权用户**时,攻击可能是明智的,相反,它只验证请求来自**授权用户的浏览器**。攻击者做的是让浏览器代表他提出请求,执行用户完全没有意识到的明智行为。重新生成会话ID对于会话固定非常有用,但与CSRF(或XSRF)无关。 – Lion 2013-04-24 03:38:28