我的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);
答案 0 :(得分:1)
我认为问题可以是语法或mysql筛选。尝试使用PDO with bindParam method
答案 1 :(得分:-1)
$sql = "SELECT * FROM `images` WHERE rname = '$rname' AND rcity = '$rcity' AND rstate = '$rstate'";
尝试实现这一点,即在'
(撇号)之间直接使用变量,它应该是完美的