У меня довольно странная проблема с моим PHP MySQL Query, я пытаюсь вернуть строки, которые имеют правильные значения rname, rcity и rstate.Ошибка PHP в MySQL при использовании переменной в выражении WHERE
$sql = "SELECT * FROM `images` WHERE rname = '" . $rname . "' AND rcity = '" . $rcity . "' AND rstate = '" . $rstate . "'";
Когда я запустил этот запрос, он возвращает только 0 результатов. Однако после некоторых игр с ним, если я использую только rname и rstate в разделе WHERE, он возвращает результаты.
$sql = "SELECT * FROM `images` WHERE rname = '" . $rname . "' AND rstate = '" . $rstate . "';
Это работает идеально. Поэтому, когда я пытался использовать rcity в разделе WHERE.
$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);
Вы можете создать запрос следующим образом: '$ query =" SELECT * FROM \ 'test \' WHERE rname LIKE '% $ rname%' И rcity LIKE '% $ rcity%' AND rstate LIKE '% $ rstate%'; ";" и дайте мне знать какие-либо изменения? '%' Является подстановочным символом и будет возвращать строки, которые * содержат * значение переменной, а не одинаковое. –
Какова стоимость $ rstate? Вы только что сделали «die ($ rstate)», чтобы убедиться, что у вас есть то, что вы думаете? Если у вас есть законное значение для $ rstate, уверены ли вы, что в базе данных есть соответствующие значения? – TunaMaxx
может быть его проблема с пробелом? либо в БД, либо в запрошенных данных? –