php
  • mysql
  • sql
  • mysqli
  • 2014-01-28 3 views 0 likes 
    0

    У меня довольно странная проблема с моим 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); 
    
    +0

    Вы можете создать запрос следующим образом: '$ query =" SELECT * FROM \ 'test \' WHERE rname LIKE '% $ rname%' И rcity LIKE '% $ rcity%' AND rstate LIKE '% $ rstate%'; ";" и дайте мне знать какие-либо изменения? '%' Является подстановочным символом и будет возвращать строки, которые * содержат * значение переменной, а не одинаковое. –

    +0

    Какова стоимость $ rstate? Вы только что сделали «die ($ rstate)», чтобы убедиться, что у вас есть то, что вы думаете? Если у вас есть законное значение для $ rstate, уверены ли вы, что в базе данных есть соответствующие значения? – TunaMaxx

    +1

    может быть его проблема с пробелом? либо в БД, либо в запрошенных данных? –

    ответ

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

    Попробуйте для реализации этого, то есть с использованием переменной непосредственно между ' (апостроф), она должна работать отлично

    +0

    Все еще появляется уведомление. «Запрос возвратил 0 строк». Если я выхожу из $ sql, скопируйте и вставьте его в свой MySQL-клиент, он отлично работает. Насколько я могу судить, PHP не нравится, когда я даю rcity значение переменной. Если я оставлю rname и rstate в качестве значения переменной и жесткого кода rcity для «Лас-Вегаса» (это то, что эхо-рейз $ rcity) Это работает. Но когда я даю rcity переменную типа rcity = '$ rcity' в sql, она возвращается к возвращению 0 строк. –

    +0

    Каковы ваши данные в базе данных, Попробуйте напрямую Использовать запрос в окне командной строки SQL в phpmyadmin. –

    +0

    Запрос работает так, как должен, когда я напрямую его использую в phpMyAdmin. –

    1

    Я думаю, что проблема может быть с синтаксисом или экранированием mysql. Попробуйте использовать PDO with bindParam method

    Смежные вопросы