За последние 24 часа нас посетили 17611 программистов и 1742 робота. Сейчас ищут 1139 программистов ...

Помогите с запросом

Тема в разделе "PHP для новичков", создана пользователем AntonioS, 4 мар 2011.

  1. AntonioS

    AntonioS Активный пользователь

    С нами с:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Необходимо сделать выборку из базы по нескольким параметрам.
    PHP только начал изучать, возможно пере/недомудрил.

    PHP:
    1. $where = '';
    2. if (!empty($_POST['speak']))
    3.     $where = $where . " AND speak = " . $_POST['speak'];
    4. if (!empty($_POST['learning']))
    5.     $where = $where . " AND learning = " . $_POST['learning'];
    6. if (!empty($_POST['country']))
    7.     $where = $where . " AND country = " . $_POST['country'];
    8.  
    9. $query = "SELECT name FROM users WHERE".$where;
    Запрос получается примерно таким:

    PHP:
    1. SELECT name FROM users WHERE
    2. AND learning = German
    3. AND learning = English
    4. AND country = American Samoa
    Как убрать первое AND и добавить ' ' в German, English, American Samoa ?
    Или существует другой, более грамотный способ для данной задачи?
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    таких способов много, но перечислять их все нет смысла - сам потом со временем дойдёшь.
    в твоём же случае самым простым вариантом будет

    PHP:
    1.  
    2. <?php
    3.  
    4.  $where = '1=1';
    5.  if (!empty($_POST['speak']))
    6.      $where = $where . " AND speak = '{$_POST['speak']}'";
    7.  if (!empty($_POST['learning']))
    8.      $where = $where . " AND learning = '{$_POST['learning']}'";
    9.  if (!empty($_POST['country']))
    10.      $where = $where . " AND country = '{$_POST['country']}'";
    11.  
    12.  $query = "SELECT name FROM users WHERE ".$where;
    однако прямая подача элементов в запрос нежелательна.
    лучше их предварительно экранировать спомощью escape-функций.
     
  3. AntonioS

    AntonioS Активный пользователь

    С нами с:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Gromo, спасибо! Заработало, наконец!