Запрос к бд как правильно сделать

236
29 сентября 2018, 22:40

Здравствуйте подскажите как правильно сделать запрос в mysql , нужно чтобы из таблицы выводились значения моделей авто в зависимости от выбранной марки. Архитектура таблицы: |id|marka|model|url|. Список марок выводится, список моделей должен выводится через ajax , ajax написал но вот проблемма с запросом к бд осталась, вот код запроса к бд:

     <?php
    $hostname = "localhost"; 
    $username = "***"; 
    $password = "***"; 
    $dbName = "***"; 

    mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
    mysql_query('SET NAMES utf8') or header('Location: Error');
    mysql_select_db($dbName) or die (mysql_error());

     $MODEL = $_POST['model'];

    if (isset($MODEL) && !empty($MODEL)) {
    $query = "SELECT DISTINCT model FROM filtr_db";
    $DB = mysql_query($query);
    //  Обработаем
    $DB = array_column($DB, 'model');
   //  Выводим
    echo json_encode($DB);
   } else {
     echo '[]';
   }

Правка

         <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
                    <script type="text/javascript">
                            $('#idcat').change(function(){
                                var val = $(this).val();
                                $('#idcat2').html('');
                                $.ajax({
                                type: 'POST',
                                url: 'templates/megawebshop/html/com_virtuemart/category/show.php',
                                data: {'model': val, 'url': val},
                                success: function(data) {
                                    var obj = JSON.parse(data);
                                    obj.forEach(function(item) {
                                        $('#idcat2').append($("<option></option>").attr("value",item).text(item)); 
                                    })
                                }
                                });
                            });
                             $('#idcat2').change(function(){
                                var val = $(this).val();
                                $('#redirect').attr("value", $url)
                            });
                    </script>
                    <input id="redirect" type="submit" name="submit" value="Кнопка" />
         //Файл show.php
     $MODEL = $_POST['model'];
     $URL = $_POST['url'];

if (isset($MODEL) && !empty($MODEL)) {
//  нужно еще написать эскейпер для $MODEL, возможно используя mysql_real_escape_string()
$query = "SELECT model FROM filtr_db WHERE marka='$MODEL'";
$DB = mysql_query($query);
//  Обработаем
$JSON = array();
while ($row = mysql_fetch_assoc($DB)) {
    $JSON[] = $row['model'];
}
//  Выводим
  echo json_encode($JSON);
 } else {
   echo '[]';
  };
  if (isset($URL) && !empty($URL)) {
     $query = "SELECT url FROM filtr_db WHERE model='$URL'";
     $DB = mysql_query($query);
     $url = array();
     while ($row=mysql_fetch_assoc($DB))
                {
                $url = $row['url']; 
                }
 }
Answer 1

Сперва попробуйте так:

    $hostname = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbName = ""; 

    mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");
    mysql_query('SET NAMES utf8') or header('Location: Error');
    mysql_select_db($dbName) or die (mysql_error());

     $MODEL = $_POST['model'];

    if (isset($MODEL) && !empty($MODEL)) {
    //  нужно еще написать эскейпер для $MODEL, возможно используя mysql_real_escape_string()
    $query = "SELECT model FROM filtr_db WHERE marka='$MODEL'";
    $DB = mysql_query($query);
    //  Обработаем
    $JSON = array();
    while ($row = mysql_fetch_assoc($DB)) {
        $JSON[] = $row['model'];
    }
   //  Выводим
    echo json_encode($JSON);
   } else {
     echo '[]';
   }

Вариант на PDO:

$hostname = "localhost"; 
$username = "root"; 
$password = ""; 
$dbName = ""; 
$MODEL = $_POST['model'];
if (isset($MODEL) && !empty($MODEL)) {
    try {
        $dbh = new PDO("mysql:host=$hostname;dbname=$dbName", $username, $password);
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
    $sql = 'SELECT model FROM filtr_db WHERE marka=:marka';
    $sth = $dbh->prepare($sql);
    $sth->execute(array(':marka' => $MODEL));
    $DB = $sth->fetchAll();
    echo json_encode(array_column($DB, 'id'));
} else {
    echo '[]';
}