2013-07-12 26 views
0

而不是我的查詢是像/search.php?cat=2,我想它而不是/search.php?cat=SomeName。有沒有一種標準的方式來將查詢從一個ID交換到不同的列,如'名稱'?

我剛開始學習PHP和MYSQL,當然感覺有很多我不知道的標準實踐。我只是得到了一些東西(你可能不同意;),並且把一個函數交換到一個函數中,這個函數可以用於ID的ID,它正在工作。

有沒有更標準的做法呢?

工作代碼:

function swap_name_for_id($name, $search) { 
     global $connection; 
     if ($search == 'category') { 
      $query = "SELECT categories.id, categories.name 
       FROM categories 
       WHERE categories.name = '{$name}'"; 
     } 
     $swap_set = mysqli_query($connection, $query); 
     confirm_query($swap_set); 
     while ($swap = mysqli_fetch_array($swap_set)) { 
      $search_id = $swap["id"]; 
     } 
     return $search_id; 
    } 
function get_parts_for_category($category_name) { 
     $category_id = swap_name_for_id($category_name,  'category'); 
     global $connection; 
     $query = "SELECT parts.id, parts.name, parts. part_category 
       FROM parts 
       WHERE part_category = {$category_id} 
       ORDER BY name ASC"; 
     $part_set = mysqli_query($connection, $query); 
     confirm_query($part_set); 
     return $part_set; 
    } 
+2

任何時候你接受用戶提供的輸入並將其烘焙到一些SQL中,一定要確保用戶提供的值避免了一種稱爲SQL注入的攻擊類型 –

+0

您是對的,它在我的列表中。我還沒有到了學習安全的細節。即使他們在此實例中從下拉列表中選擇了一個類別,我仍然認爲它仍然是一個問題,因爲用戶仍然可以在查詢字符串的地址欄中鍵入他們想要的任何內容嗎? – ryansommers

+0

是的,一個好方法是使用查詢實用程序方法的數據庫庫,該方法總是會轉義用戶提供的值。 PHP框架codeigniter帶有這樣一個類。 –

回答

1

一般來說據我知道你剛剛做了第二次查詢像你一樣,雖然他們通常被合併成一個查詢,例如:

function get_parts_for_category($category_name) { 
    global $connection; 
    $query = "SELECT parts.id, parts.name, parts.part_category 
      FROM parts 
      WHERE part_category = (SELECT categories.id FROM categories WHERE categories.name = '{$category_name}') 
      ORDER BY name ASC"; 
    $part_set = mysqli_query($connection, $query); 
    confirm_query($part_set); 
    return $part_set; 
} 
+0

謝謝,這很有道理。我不記得你可以在裏面做另一個查詢。但是,複製/粘貼不起作用。我試圖將其更改爲 WHERE part_category =(SELECT categories.id,categories.name FROM categories categories WHERE categories.name ='{$ category_name}') 但現在我得到「數據庫查詢失敗。操作數應該包含1列( s)「 – ryansommers

+0

我的不好,我的答案中的內部'where'子句是錯誤的,您只需要選擇'categories.id'字段,就像它在外部查詢的where子句中使用的那樣。現在檢查我的答案。 –

+0

工作完美,非常感謝!儘管如此,我仍然給自己一個瘋狂的功能解決方案的攻擊者;) – ryansommers

相關問題