我正在尝试根据传递给常见变量的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';)之外执行的操作。
我确信这一定是一件我看不见的蠢事。请帮帮我=)
答案 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”行。