Построение строки запроса на основе значений переменных. Где ошибка?
Я пытаюсь создать строку запроса на основе значений GET, передаваемых в общие переменные:
если isset, gTipo = $_GET['tipo'] и другие подобные.
Итак, вот код, который не работает:
$sqlLista = 'SELECT * FROM produtos';
if($gTipo <> 0 || $gLinha <> 0)
{
if($gtipo <> 0 && $gLinha == 0 )
{
$sqlLista .= ' WHERE id_tipo = '.$gTipo.'';
}
if($gtipo <> 0 && $gLinha <> 0)
{
$sqlLista .= ' WHERE id_tipo = '.$gTipo.' AND id_linha = '.$gLinha.'';
}
if($gTipo == 0 && $gLinha <> 0)
{
$sqlLista .= ' WHERE id_linha = '.$gLinha.'';
}
}
Если я установлю свой URL как? Tipo=2&linha=4, мой сценарий захватит эти переменные GET и создаст общие var gTipo и gLinha. Если какой-либо из этих GET не установлен, gTipo или gLinha получают значение "0" (ноль).
Когда я запускаю сценарий построения запроса, к sqlLista ничего не добавляется, кроме того, что делается вне if ( $sqlLista = 'SELECT * FROM produtos';).
Я уверен, что это глупость, которую я не вижу. Пожалуйста, помогите мне =)
3 ответа
Я думаю, что ваша проблема в переменном случае:
if($gtipo <> 0
...
должно быть
if($gTipo <> 0
...
в 2 местах.
Не знаю, в чем твоя проблема, но код кажется мне немного раздутым
Я бы сделал это так
$w = array();
$where = '';
if (!empty($_GET['tipo'])) $w[] = 'id_tipo = '.intval($_GET['tipo']);
if (!empty($_GET['linha'])) $w[] = 'id_linha = '.intval($_GET['linha']);
if ($w) $where = " WHERE ".implode(' AND ',$w);
$sqlLista = SELECT * FROM produtos'.$where;
надеюсь, вы знаете, что делаете, и вам действительно нужно И, а не ИЛИ в запросе.
если у вас уже есть проверки, код будет еще короче
$w = array();
$where = '';
if ($gtipo) $w[] = "id_tipo = $gtipo";
if (gLlinha) $w[] = "id_linha = gLinha";
if ($w) $where = " WHERE ".implode(' AND ',$w);
$sqlLista = 'SELECT * FROM produtos'.$where;
Ваши имена переменных не совпадают - $gTipo vs $gtipo.
Эта строка предотвратит выполнение вашей внутренней логики. убери это.
if($gTipo <> 0 || $gLinha <> 0)
В качестве стиля вы должны использовать "else if", чтобы предотвратить добавление нескольких строк "WHERE", если вы допустили логическую ошибку.