2013-04-24 185 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