在WHERE子句中使用变量时出现PHP MySQL结果问题

在WHERE子句中使用变量时出现PHP MySQL结果问题,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我的PHP MySQL查询有一个非常奇怪的问题,我试图返回具有正确rname、rcity和rstate值的行 $sql = "SELECT * FROM `images` WHERE rname = '" . $rname . "' AND rcity = '" . $rcity . "' AND rstate = '" . $rstate . "'"; 当我运行该查询时,它只返回0个结果。但是,在对它进行一些处理之后,如果我在WHERE子句中只使用rname和rstate,它将返回结果 $s

我的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已声明,它具有正确的值,等等

我还在数据库中创建了另一个测试表,以检查db端是否存在问题。这个问题仍然存在

下面是getQuery()函数的完整代码

这是我的数据库类

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;
        }

    }
我在类_构造函数中调用查询,如下所示

$con = new db;

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

尝试实现这一点,即直接在
(撇号)之间使用变量,它应该可以完美地工作

我认为问题可能在于语法或mysql屏蔽。尝试使用

您是否可以尝试这样构建查询:
$query=“SELECT*FROM`test`其中rname像“%$rname%”和rcity像“%$rcity%”和rstate像“%$rstate%”并让我知道任何更改?
%
是一个通配符,将返回包含变量值的行,但不完全匹配。$rstate的值是多少?你刚刚做了一个
die($rstate)以验证您是否拥有您认为自己的功能?如果您确实有$rstate的合法值,您确定数据库中有匹配的值吗?可能是空白问题吗?无论是在数据库中还是在请求的数据中?同意Abhik,这就是我的意思。尝试
echo“[$rcity]”
查看传入的变量中是否有空格。是否确定可以信任$rcity变量(内容的来源)?只需将变量转储($rcity)并检查结果。仍然会发出通知。“查询返回0行”。如果我回显$sql,复制并粘贴到我的MySQL客户机中,它就可以完美地工作。据我所知,PHP不喜欢我给rcity一个变量值。如果我将rname和rstate作为一个变量值,并将rcity硬编码为“Las Vegas”(这是$rcity的回声),那么它就可以工作了。但当我在sql中给rcity一个类似rcity='$rcity'的变量时,它返回0行。您的数据库数据是什么,请尝试在phpmyadmin的sql命令窗口中直接使用查询。查询的工作方式与我在phpmyadmin中直接使用它时的工作方式相同。
$con = new db;

    $sql = $this->getQuery($data);
    $result = $con->query($sql);
$sql = "SELECT * FROM `images` WHERE rname = '$rname' AND rcity = '$rcity' AND rstate = '$rstate'";