2013-10-28 64 views
0

我在php中通过传递变量通过GET方法创建搜索查询。当变量为空时,它将传递如下查询:在php中搜索查询

SELECT * FROM table WHERE column_name = null

它显示错误(显而易见)。我想创建类似的查询。如果用户不从搜索选项中选择任何内容,则应该从该列中提取所有数据。

这是什么正确的逻辑? 谢谢。

代码:

if(isset($_GET['selPetType']) && $_GET['selPetType'] != '') 
{ 
    $searchParams['petType'] = $_GET['selPetType']; 
    $queryStr .= " PetType='" .$_GET['selPetType']. "'"; 
} 

if(isset($_GET['txtPetBreed1']) && !empty($_GET['txtPetBreed1'])) 
{ 
    $searchParams['breed'] = $_GET['txtPetBreed1']; 
    $queryStr .= " AND PetBreed1 ='". $_GET['txtPetBreed1'] . "'"; 
} 


$clause1 = "SELECT * FROM pet WHERE $queryStr ORDER BY `Avatar` ASC LIMIT $startLimit, $pageLimit"; 
$totalRun1 = $allQuery->run($clause1); 
+0

如果$ _GET中没有任何内容正在传递,请不要执行任何SQL –

+2

只需在SQL中不要使用“WHERE”。另外,请确保清理您的用户输入,您不需要任何SQL注入。 –

+0

如果用户选择petBreed,那么它会给我错误。因为查询语句以AND开头......在第二个查询中没有WHERE。如果我打算将WHERE外延,那么如果用户选择2个搜索选项,那么WHERE将在查询中为2次... –

回答

0
if(isset($_GET['your_variable'])){ 
    $whr = "column_name = $_GET['your_variable']"; 
} 
else{ 
$whr = "1 = 1"; 
} 

$qry ="SELECT * FROM table WHERE ".$whr; 
+0

column_name每次都会有所不同..因为有7-8个搜索选项..是否有任何方式使其动态? –

+0

给出$ _GET作为字段名称的密钥 –

+0

如果用户选择多个值,则thye查询将如下所示: SELECT * FROM table WHERE column_name1 ='abc'column_name2 ='xyz'; 有没有在之间.. –

0

例如:

<?php 
    $userSelectedValue = ...; 

    $whereCondition = $userSelectedValue ? " AND column_name = " . $userSelectedValue : "" ; 

    $query = "SELECT * FROM table WHERE 1" . $whereCondition; 

?> 

然后考虑它更安全地使用准备好的语句。

1

也许是这样的:

$get['param1'] = 'foo'; 
    $get['param3'] = null; 
    $get['param2'] = ''; 
    $get['param4'] = 'bar'; 

    $where = null; 

    foreach ($get as $col => $val) { 
     if (!empty($val)) { 
      $where[] = $col . ' = "' . $val . '"'; 
     } 
    } 

    $select = 'SELECT * FROM pet '; 
    if ($where) { 
     $select .= 'WHERE ' . implode(' AND ', $where); 
    } 
    $select .= ' ORDER BY `Avatar` ASC LIMIT $startLimit, $pageLimit'; 

编辑:我添加if删除空值,并增加2个新的价值观例子,所以你可以看到这个值将不能查询。

+0

我试过这..为此我需要通过所有获取变量到$ get数组。但在某些情况下,它可能为空,如果用户不选择某些搜索字段。 –

+0

在这种情况下,我的查询将变成:SELECT * FROM pet WHERE PetType =“dog”AND PetBreed1 =“”AND AgeType =“ “和PetGender =”“ –

+0

我用这个:$ get ['PetType'] = isset($ _ GET ['PetType'])? $ _GET ['PetType']:false;但是,如果该字段为空,我需要所有值。 –