0

我正在尝试根据传递给常见变量的 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 变量并创建通用变量 gTipo 和 gLinha。如果未设置任何此 GET,则 gTipo 或 gLinha 将收到“0”(零)值。

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

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

4

3 回答 3

2

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

if($gtipo <> 0...

应该

if($gTipo <> 0...

在 2 个地方。

于 2011-09-25T15:51:26.740 回答
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;
于 2011-09-25T15:58:45.327 回答
0

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

此行将阻止您的内部逻辑执行。去掉它。

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

作为风格问题,如果您犯了逻辑错误,您应该使用“else if”来防止附加多个“WHERE”行。

于 2011-09-25T20:31:30.620 回答