2014-01-28 50 views
0

我有我的PHP MySQL查詢一個非常奇怪的問題,我想返回有正確的RNAME,rcity和rstate值的行。使用一個變量時PHP MySQL的結果問題在WHERE子句

$sql = "SELECT * FROM `images` WHERE rname = '" . $rname . "' AND rcity = '" . $rcity . "' AND rstate = '" . $rstate . "'"; 

當我運行該查詢時,它只返回0結果。然而,在玩過它之後,如果我只在WHERE子句中使用rname和rstate,它將返回結果。

$sql = "SELECT * FROM `images` WHERE rname = '" . $rname . "' AND rstate = '" . $rstate . "'; 

這是完美的。所以當我試圖在WHERE子句中使用rcity時。

$sql = "SELECT * FROM `images` WHERE rcity = '" . $rcity . "'"; 

0結果返回。所以查詢的rcity部分有些問題。如果我努力將值寫入查詢而不是$ rcity變量,它會調出結果。我翻了一番檢查,以確保$ rcity宣佈,它具有正確的價值等

我還創造了另一個測試數據庫中的表進行檢查,看它是否在DB端的問題。問題依然存在。

這裏是getQuery()函數的完整代碼

private function getQuery($data){ 
    // Takes raw data and creats image(s) query to search for listing resort... 
     $listing = $data['listing']; 
     $rname = $data['rname']; 
     $rcity = $data['rcity']; 
     $rstate = $data['rstate']; 

     $query = "SELECT * FROM `test` WHERE rname = '" . $rname . "' AND rcity = '" . $rcity . "' AND rstate = '" . $rstate ."'"; 

     return $query; 
} 

,這裏是我的數據庫類

class db { 

     public function __construct(){ 
      $this->server = DB_SERVER; 
      $this->user = DB_USER; 
      $this->Pass = DB_PASS; 
      $this->Database = DB_Database; 
     } 

     protected function connect(){ 
      return mysqli_connect($this->server, $this->user, $this->Pass, $this->Database); 
     } 

     public function query($sql){ 

      $conn = $this->connect(); 
      $query = $conn->query($sql); 

       if($query == false) { 
        throw new Exception("Query failed:".PHP_EOL.$conn->error.PHP_EOL.$sql); 
       } 
       if($query->num_rows == 0) { 
        // need E_NOTICE errors enabled to see this, 
        // on screen if display_errors is on, else in PHP error log 
        trigger_error("Query returned 0 rows:".PHP_EOL.$sql); 
       } 
       $result = array(); 
        while ($row = $query->fetch_assoc()){ 
         $result[] = $row; 
        } 
       return $result; 
     } 

    } 

我打電話查詢一類__construct函數像這樣

$con = new db; 

    $sql = $this->getQuery($data); 
    $result = $con->query($sql); 
+0

您可以嘗試構建這樣的查詢:'$ query =「SELECT * FROM \'test \'WHERE rname LIKE'%$ rname%'AND rcity LIKE'%$ rcity%'ANDrstate LIKE '%$ rstate%';「;'讓我知道任何改變? '%'是一個通配符,它​​將返回包含*變量值的行,不完全匹配。 –

+0

$ rstate的價值是多少?你剛剛做了一個'死($ rstate)','以驗證你有你的想法嗎?如果您確實擁有$ rstate的合法值,您確定數據庫中有匹配的值嗎? – TunaMaxx

+1

可能是它的一個空白問題?無論是數據庫還是請求的數據? –

回答

-1
$sql = "SELECT * FROM `images` WHERE rname = '$rname' AND rcity = '$rcity' AND rstate = '$rstate'"; 

嘗試實現這個即直接使用'(單引號)之間的變量,它應該工作完美

+0

仍然提出通知。 「查詢返回0行」。如果我回顯出$ sql,將其複製並粘貼到我的MySQL客戶端中,它可以很好地工作。據我所知,當我給rcity一個變量值時,PHP不喜歡。如果我把rname和rstate作爲一個變量值和硬編碼到'拉斯維加斯'(這是什麼$ rcity回聲)它是有效的。但是,當我在rcity中給出一個像rcity ='$ rcity'這樣的變量時,它會返回到0行。 –

+0

什麼是您的數據庫數據,請嘗試直接在phpmyadmin的SQL命令窗口中使用查詢。 –

+0

當我直接在phpMyAdmin中使用它時,查詢的工作方式應該如此。 –