簡體   English   中英

在WHERE子句中使用變量時,PHP MySQL結果出現問題

[英]PHP MySQL result issue when using a variable in the WHERE Clause

我的PHP MySQL查詢存在一個很奇怪的問題,我試圖返回具有正確rname,rcity和rstate值的行。

$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,它具有正確的值,等等。

我還在數據庫中創建了另一個測試表,以檢查它在數據庫方面是否存在問題。 哪個問題仍然存在。

這是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);

我認為問題可能出在語法或mysql篩選上。 嘗試將PDO與bindParam方法一起使用

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

嘗試實現這一點,即直接在' (撇號)之間使用變量,它應該可以完美地工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM