2012-10-10 82 views
0

我有以下MySQL的MySQL的SELECT語句,在2個表查詢,其中1列匹配

$tutorial = $database->query(
     'SELECT ' . 
      'tutorial.*, ' . 
      'apps.*'. 
       'FROM ' . 
        $database->db_prefix . 'tutorial, ' . 
        $database->db_prefix . 'apps ' . 
         'WHERE ' . 
          'apps.title = "' . $name . '" AND apps.id = tutorial.app AND tutorial.relation = "' . $user['id'] . '"' 
    ); 

我想獲得該行地方apps.title等於$名稱,然後得到一個基於所有教程檢索到的應用ID。這充當兩個表之間的鏈接。

以上是否正常工作?

特別

'apps.title = "' . $name . '" AND apps.id = tutorial.app AND tutorial.relation = "' . $user['id'] . '"' 
+0

你** **真的需要閱讀如何正確[轉義SQL參數](http://bobby-tables.com/php)。這是危險的不安全。 – tadman

+0

ay?這個危險的不安全的lmao如何? $ name包含我已驗證的發佈變量。 :不要傻。 – Jimmyt1988

+0

驗證是不夠的。您**必須轉義您放入SQL中的所有值。如果它不是很明顯,那麼它就是錯誤的。如果你採取休閒方式,你會被燒傷。當有[自動注入工具](http://sqlmap.org/)的人劫持您的網站時,您不會笑。 – tadman

回答

0

我想獲取apps.title等於$ name的行,然後根據檢索到的應用程序ID獲取所有教程 。

從你上面貼的查詢,我想你可以使用app場像JOIN兩個表:

SELECT t.* 
FROM tutorials t 
INNER JOIN apps a ON t.app = a.app 
WHERE a.title = $name AND t.relation = $user['id'] 

或者:

SELECT 
    tutorial.* 
FROM tutorial 
WHERE toutorial.app IN 
(
    SELECT app FROM apps WHERE apps.title = $name AND app IS NOT NULL 
) AND tutorial.relation = $user['id'] 
+0

天才:D,第二個很棒! 使用連接有什麼好處嗎? – Jimmyt1988

+0

@JamesT - 是的,如果你想從第二個連接表中選擇更多的行和其他好處。當使用'IN'時,不要指望'apps'表中'app'值的'NULL'值。如果有一個具有NULL值的'app',那就是爲什麼我在編輯中添加了'IS NOT NULL',那麼你的查詢就不會返回任何東西。 'JOIN'是安全的,我認爲在大多數情況下速度更快。 –

0

不,這行不通。請參閱Mysql JOIN語法。

相關問題