在WHERE子句中使用变量时出现PHP MySQL结果问题
我的PHP MySQL查询有一个非常奇怪的问题,我试图返回具有正确rname、rcity和rstate值的行在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
$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'";