Построение строки запроса на основе значений переменных.Где ошибка? - PullRequest
0 голосов
/ 25 сентября 2011

Я пытаюсь создать строку запроса на основе значений 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 ]

2 голосов
/ 25 сентября 2011

Я думаю, что ваша проблема в переменном регистре:

if($gtipo <> 0 ...

должно быть

if($gTipo <> 0 ...

в 2 местах.

1 голос
/ 25 сентября 2011

Не знаю, в чем ваша проблема, но мне кажется, что код немного раздутый
Я бы сделал это так

$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;
0 голосов
/ 26 сентября 2011

Ваши имена переменных не совпадают - $ gTipo против $ gtipo.

Эта строка будет препятствовать выполнению вашей внутренней логики. удали это.

if($gTipo <> 0 || $gLinha <> 0)

По стилю, вы должны использовать "else if", чтобы предотвратить добавление нескольких строк "WHERE", если вы допустили логическую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...