Динамическое предложение WHERE PHP и SQL не работает

Я работаю над проектом, где пользователь может искать в базе данных. Поля поиска - это все поля выбора. Вы можете искать по; Марка и / или Марка и / или Филиал и / или Год и / или Минимальная цена и Максимальная цена.

Пожалуйста, найдите мой код ниже:

   <?php

      $dbName = "myURL/db/savvyautoweb.mdb";

      // Throws an error if the database cannot be found
      if (!file_exists($dbName)) {
        die("Could not find database file.");
      }

      // Connects to the database
      // Assumes there is no username or password
      $conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');



      if (isset($_REQUEST['submit'])) {
        $searchMake = addslashes($_POST['makeSelection']);
        $searchModel = addslashes($_POST['modelSelection']);
        $searchBranch = addslashes($_POST['branchSelection']);
        $searchYear = addslashes($_POST['yearSelection']);
        $minPrice = addslashes($_POST['minPriceSelection']);
        $maxPrice = addslashes($_POST['maxPriceSelection']);

              $sql = "SELECT Id, Make, Model, Year, Price, SpecialPrice, Branch, StockNO FROM Vehicle ";

              if ($searchMake || $searchModel || $searchBranch || $searchYear || $minPrice || $maxPrice) {
                    $sql .= "WHERE ";
              }

              $combine = '';

              if ($minPrice) {
                    $sql .="{$combine}Price BETWEEN %$minPrice% "; $combine = 'BETWEEN ';
              }

              if ($maxPrice) {
                    $sql .="AND %$maxPrice% "; $combine = 'AND ';
              }

              if ($searchMake) {
                    $sql .="{$combine}Make LIKE '%$searchMake%' "; $combine = 'AND ';
              }

              if ($searchModel) {
                    $sql .="{$combine}Model LIKE '%$searchModel%' "; $combine = 'AND ';
              }

              if ($searchBranch) {
                    $sql .="{$combine}Branch LIKE '%$searchBranch%' "; $combine = 'AND ';
              }

              if ($searchYear) {
                    $sql .="{$combine}Year LIKE '%$searchYear%' "; $combine = 'AND ';
              }

              //$sql = "SELECT Id, Make, Model, Year, Price, SpecialPrice, Branch, StockNO FROM Vehicle WHERE Price BETWEEN $minPrice AND $maxPrice AND Make LIKE '$searchMake' AND Model LIKE '$searchModel' AND Year LIKE '$searchYear' AND Branch LIKE '$searchBranch'";
              $rs = odbc_exec($conn, $sql);

              echo "\n\n$sql\n\n";
        }


      //} else {
        //$sql = "SELECT Id, Make, Model, Year, Price, SpecialPrice, Branch, StockNO FROM Vehicle ORDER BY Make";
        //$rs = odbc_exec($conn, $sql);
        //echo "Your search criteria did not match anything in our database.";

      //}   

          echo "\t" . "<tr>\n";

              echo "\t" . "<th>Make</th><th>Model</th><th>Year</th><th>Price</th><th>Special Price</th><th>Location</th><th>Stock Number</th>" . "\n";

                  while (odbc_fetch_row($rs)) { 
                      $id = odbc_result($rs, Id);
                      $make = odbc_result($rs, Make);
                      $model = odbc_result($rs, Model);
                      $year = odbc_result($rs, Year);
                      $price = odbc_result($rs, Price);
                      $specialPrice = odbc_result($rs, SpecialPrice);
                      $branch = odbc_result($rs, Branch);
                      $stockNo = odbc_result($rs, StockNO);

                          echo "\t" . "<tr>\n";
                              echo "\t\t" . "<td>" . $make . "</td><td><a href=/newsite/selected-vehicles?Id=$id>" . $model . "</a></td><td>" . $year . "</td><td>" . $price . "</td><td>" . $specialPrice . "</td><td>" . $branch . "</td><td>" . $stockNo . "</td>\n";

                          echo "\t" . "</tr>\n";
                  }

      //echo "\n\n$sql\n\n";
      //echo $minPrice;
        //echo $maxPrice;

      odbc_free_result($rs);
      odbc_close($conn);

      // This message is displayed if the query has an error in it
      if (!$rs) {
          exit("There is an error in the SQL!");
      }

  ?>

Цель приведенного выше кода для пользователя для поиска в базе данных. Но, логически говоря, при поиске чаще всего вы не будете выбирать все доступные поля. Для бренда, марки, филиала и года, поиск работает нормально, если вы выбираете только некоторые, и также работает, когда вы выбираете все. Но как только вы выбираете минимальную и максимальную цену, код перестает выполняться.

Я напечатал запрос, используя это, чтобы увидеть структуру: echo "\n\n$sql\n\n"; и я не могу найти проблему. Ошибки не отображаются, просто не работает. это то, что отображается, если вы выбираете минимальную и максимальную цены: SELECT Id, Make, Model, Year, Price, SpecialPrice, Branch, StockNO FROM Vehicle WHERE Price BETWEEN %100000.0% AND %150000.0% AND Make LIKE '%HYUNDAI%' AND Model LIKE '%I20%' AND Branch LIKE '%EAST_RAND%' AND Year LIKE '%2011%' There is an error in the SQL!

Кроме того, где в приведенном выше коде я могу добавить сообщение, информирующее пользователя о том, что выбранные элементы не могут быть найдены в базе данных?

Любая помощь будет принята с благодарностью.

0 ответов

Другие вопросы по тегам