基于变量值构建查询字符串。哪里出错了?

时间:2011-09-25 15:45:24

标签: php mysql string-building

我正在尝试根据传递给常见变量的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.'';
    }
}

如果我将我的网址设置为?tipo = 2&amp; linha = 4,我的脚本将捕获此GET变量并创建常见的var gTipo和gLinha。如果未设置任何此GET,则gTipo或gLinha将接收“0”(零)值。

当我运行查询构建脚本时,没有任何内容连接到$ sqlLista,除了在if($ sqlLista ='SELECT * FROM produtos';)之外执行的操作。

我确信这一定是一件我看不见的蠢事。请帮帮我=)

3 个答案:

答案 0 :(得分:2)

我认为你的问题是可变的情况:

if($gtipo <> 0 ...

应该是

if($gTipo <> 0 ...

在2个地方。

答案 1 :(得分:1)

不知道你的问题是什么,但代码似乎对我来说有点臃肿 我会这样做的

$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;

希望你知道你在做什么,你真的需要AND,而不是查询中的OR。

如果您已经有验证,则代码会更短

$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;

答案 2 :(得分:0)

您的变量名称不一致 - $ gTipo vs $ gtipo。

此行将阻止您的内部逻辑执行。删除它。

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

作为一种风格问题,你应该使用“else if”来防止在你出现逻辑错误时附加多个“WHERE”行。