2013-10-28 59 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;但是,如果該字段爲空,我需要所有值。 –