2014-10-01 33 views
0

我是PHP新手。我已經完成了以下工作,但是我認爲必須有一個更好的方法來做到這一點,我所做的是非常骯髒的黑客攻擊。PHP/MYSQL從一個表中獲取引用,然後從另一個表中獲取引用。

所以,我有一本詞典,每個單詞都有一個引用對應另一個表中的另一個單詞。我想要搜索的Ar詞搜索AR表以查看是否有匹配。如果是,則返回該單詞的引用,然後轉到EN表並搜索該引用是否存在。然後返回所有帶有該參考號碼的單詞。 以下是這項工作,但我想知道是否有更好的方法來做到這一點。

<?php 
    if (!empty($_POST)){ 
    $word = $_POST["word"]; 
     $result = mysql_query("SELECT ref FROM en_a_ar WHERE ar = '$word'"); 
      while($row = mysql_fetch_array($result)) { 
       $searchRef = $row['ref']; 
       $searchResult = mysql_query("SELECT en FROM en_a WHERE ref = '$searchRef'"); 
       while($row = mysql_fetch_array($searchResult)) { 
       echo $row['en']; 
       echo "<br>"; 
       } 

      } 
     } 
    ?> 
+0

請不要在新代碼中使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 *他們不再維護,並[已正式棄用](https://wiki.php.net/rfc/mysql_deprecation)*。看到[紅色框](http://uk.php.net/manual/en/function.mysql-connect.php)?學習[準備的語句](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://us1.php.net/pdo)或[MySQLi](http:// us1.php.net/mysqli)。 [這篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)將幫助你決定哪些。 – 2014-10-01 19:51:54

+2

你很容易受到[sql注入攻擊](http://bobby-tables.com),所以是的,有更好的方法來做到這一點。而且你基於外部查詢的結果運行你的內部查詢 - 這幾乎總是一個糟糕的設計 - 一個'JOIN'ed查詢可以這樣做。 – 2014-10-01 19:53:44

回答

1

使用的INNER JOIN

SELECT 
    en_a.en 
FROM 
    en_a 
JOIN 
    en_a_ar 
ON 
    en_a_ar.ref = en_a.ref 
WHERE 
    en_a_ar.ar = '$word' 

正如其他人所說,你需要淨化你的輸入$word,因爲它是來自客戶端並創建一個SQL Injection Vulnerability

+0

非常感謝,這正是我所需要的。我需要更多地瞭解INNER JOIN。 非常感謝。 – 2014-10-01 20:05:12

相關問題