Php 基于变量值生成查询字符串。错在哪里?

Php 基于变量值生成查询字符串。错在哪里?,php,mysql,string-building,Php,Mysql,String Building,我正在尝试根据传递给公共变量的GET值创建查询字符串: 如果设置为,则gTipo=$\u GET['tipo']和其他类似的值 因此,以下是不起作用的代码: $sqlLista = 'SELECT * FROM produtos'; if($gTipo <> 0 || $gLinha <> 0) { if($gtipo <> 0 && $gLinha == 0 ) { $sqlLista .= ' W

我正在尝试根据传递给公共变量的GET值创建查询字符串:

如果设置为,则gTipo=$\u 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.'';
    }
}
$sqlLista='SELECT*FROM produtos';
如果($gTipo 0 | |$gLinha 0)
{
如果($gtipo 0&$gLinha==0)
{
$sqlLista.='WHERE id_tipo='。$gTipo';
}
如果($gtipo 0&$gLinha 0)
{
$sqlLista.='WHERE id_tipo='.$gTipo.'AND id_linha='.$gLinha.';
}
如果($gTipo==0&$gLinha 0)
{
$sqlLista.='WHERE id_linha='。$gLinha';
}
}
如果我将我的url设置为?tipo=2&linha=4,我的脚本将捕获这个GET vars并创建公共var gTipo和gLinha。如果未设置任何GET,则gTipo或gLinha将接收“0”(零)值

当我运行查询构建脚本时,除了在if($sqlLista='SELECT*FROM produtos';)之外,没有任何内容与$sqlLista相关


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

我想你的问题是可变情况:

if($gtipo 0

应该是

if($gTipo 0


在两个地方。

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

if($gtipo 0

应该是

if($gTipo 0


两处。

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

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

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

$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与$gTipo

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

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

就风格而言,如果发生逻辑错误,应使用“else if”以防止多行“WHERE”追加。

变量名称不一致-$gTipo vs$gTipo

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

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

作为一种风格,如果出现逻辑错误,您应该使用“else-if”来防止添加多行“WHERE”行。

请告诉我,您已经针对SQL注入对
$gLinha
$gtipo
变量进行了清理。。这取决于您运行查询的方式。查看
mysql\u real\u escape\u string()
如果您使用的是mysql函数,那么如果您使用的是PDO,请查看PDO准备的语句。此外,如果您只希望其中一个变量是整数,则可以使用
$variable=(int)$variable;
将它们键入整数,这样它们就只能是整数(建议用于整数,因为它的处理量要小得多)。tks先生,我将使用$variable=(int)$variable:)我将在这个查询中只使用ids整数。看:$gTipo=(int)$\u GET['tipo']或die('值不是整数');不需要die()。如果不是数值,它将强制它为
0
。请告诉我,您已经针对SQL注入对
$gLinha
$gtipo
变量进行了清理。具体取决于您运行查询的方式。请查看
mysql\u real\u escape\u string()
如果您使用的是mysql函数,那么如果您使用的是PDO,请查看PDO准备的语句。此外,如果您只希望其中一个变量是整数,则可以使用
$variable=(int)$variable;
将它们键入整数,这样它们就只能是整数(建议用于整数,因为它的处理量要小得多)。tks先生,我将使用$variable=(int)$variable:)我将在这个查询中只使用ids整数。看:$gTipo=(int)$\u GET['tipo']或die('值不是整数');不需要die()。如果它不是一个数值,它将强制它为
0
。为True,变量区分大小写。
php-r'$Foo=1;var_dump($Foo)“
Gus,你完全正确!!!我知道这应该是一个愚蠢的细节,我没有看到。真的,伙计。这个键盘上的很多小时都模糊了我的眼睛和思想。没错,变量是区分大小写的。
php-r'$Foo=1;var\u dump($Foo)“
Gus,你完全正确!!!我知道这应该是一个愚蠢的细节,我没有看到。真的,伙计。在这个键盘上很多小时都在模糊我的眼睛和想法,XDTks寻求帮助。榴弹上校……但我会保持我原来的代码结构。简单有效。我不会把一群无用的操作符称为“简单”.你的第一个条件是完全没有用的。弹片上校…但我会保留我原来的代码结构。简单有效。我不会把一堆无用的运算符称为“简单”。你的第一个条件是完全没有用的