2017-08-08 47 views
0

問題是:SQL顯示每個查詢,而不是具體的一個

$type =我r_areal變量

$sqlc = "SELECT * FROM reservation where r_areal IN ('".$type."') and '".$cid."' between r_start and r_ende 
      or where r_areal IN ('".$type."') '".$cod."' between r_start and r_ende 
      or where r_areal IN ('".$type."') '".$cid."'<= r_start AND '".$cod."' >= r_ende 


      "; 

所以這是我的PHP查詢SQL。它的工作原理,但它顯示我的數據庫中的每個$type每個sql行。但它應該只顯示f.e的所有行。參數B.我知道,一個問題是where r_areal IN ('".$type."')只接受一次。但是,如果我刪除第二個和第三個,它會顯示所有$type的所有行。

任何人都可以幫助我嗎?

+2

你需要使用圓括號,否則你就會混合使用AND和OR –

+0

這是非常容易受到SQL注入攻擊。請學會使用參數化查詢,否則您的數據很容易被損壞,刪除或被盜。 http://bobby-tables.com/解釋了這些問題(謙虛,但直截了當),也有一些例子,包括在PHP中,如何安全地在你的查詢中包含變量。 – ADyson

+3

這段代碼實際運行嗎?在這個聲明中我看到了多個WHERE。那絕對不會運行。 – Eric

回答

0

使用括號來分隔AND和OR條件。

$sqlc = "SELECT * FROM reservation 
    WHERE (r_areal IN ('".$type."') AND '".$cid."' BETWEEN r_start AND r_ende) 
      OR (r_areal IN ('".$type."') '".$cod."' BETWEEN r_start AND r_ende) 
      OR (r_areal IN ('".$type."') '".$cid."'<= r_start AND '".$cod."' >= r_ende) 
      ";