2009-12-02 90 views
0

我想在以下查詢中使用參數,但我不確定如何操作。如何在查詢中連接參數

如果你能幫助我,我會很棒。

$ id將是1,2或3等,我想選擇其中C.Name是Galleri1,或Galleri2等

這是我走到這一步,但我不知道如何添加$ id。

function getGallery($id){ 

$data = array(); 

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
      FROM products AS P 
      LEFT JOIN categories C 
      ON C.id = P.category_id 
      WHERE C.Name = "Galleri($id)" 
      AND p.status = "active" 
      '); 

UPDATE:我使用PHP和MySQL

+0

是否要通過ID或名稱進行搜索?由於您的函數中沒有名稱值,因此只能通過傳入函數的ID進行搜索。 – 2009-12-02 20:38:53

回答

0

我認爲你在這裏尋找的是:

function getGallery($id){ 

$data = array(); 

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Gallery' . $id . '" 
        AND p.status = "active" 
        '); 

注:我定畫廊的拼寫查詢,因爲我認爲這可能是一個錯字:

Galleri 

到:

Gallery 

希望這有助於!

編輯:爲了防止SQL注入,而不是使用:

function getGallery($id){ 

$data = array(); 

$id = str_replace("'", "''", $id); 

$query = 'SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Gallery' . $id . '" 
        AND p.status = "active" 
        ' 
$Q = $this->db->query($query); 
+0

謝謝。有用! – shin 2009-12-02 20:51:42

+0

這可能有可能的SQL注入攻擊。請參閱http://en.wikipedia.org/wiki/SQL_injection – 2009-12-02 21:01:27

+0

確實如此,但這不是關於SQL安全性的問題,而是關於如何將參數添加到字符串的問題。不過,我會相應地編輯我的答案。 – 2009-12-02 21:06:41

2

看一看this PHP manual

首先您爲圖庫名稱創建一個字符串。 「Galleri1」,「Galleri2」等。然後將該字符串作爲參數進行查詢。

事情是這樣的:

$sth = $this->prepare('SELECT P.*, C.Name AS CatName 
       FROM products AS P 
       LEFT JOIN categories C 
       ON C.id = P.category_id 
       WHERE C.Name = ? 
       AND p.status = "active" 
       '); 

$gallery_name = "Galleri$id"; 
$sth->bind_param(1, $gallery_name); 

$q = $sth->execute(); 

從參數構建像其他回答者建議可能會打開大門SQL injection attacks,如果你不小心查詢字符串。例如,如果$id="' OR 1=1 OR C.Name !='"和您將它連接到查詢字符串會發生什麼?

使用參數綁定,就像我上面顯示的,可以防止這個問題。

1

我假設你使用PHP。大概就像

function getGallery($id){ 

    $data = array(); 

    $Q = $this->db->query("SELECT P.*, C.Name AS CatName 
         FROM products AS P 
         LEFT JOIN categories C 
         ON C.id = P.category_id 
         WHERE C.Name = 'Galleri$id' 
         AND p.status = 'active' 
         "); 

您應該然而,需要注意的SQL injections一樣,所以第一逃避它(如果它不是在其他地方完成):

function getGallery($id) { 
    $id = $this->db->escape($db); // or similar 

如果你的數據庫類的支持prepared statements ,你應該改用它們。