2017-02-27 199 views
-1

我正在創建使用PHP的搜索選項。我想根據給定的字段給多個字段時,我需要做搜索我需要從數據庫中獲取記錄。要得到清晰的想法,我需要做的下面是搜索選項的界面Mysql搜索多個字段

when user click go in form submit i need to get user given filds and fetch record according to given search crieteria

,所以我已經看過很多選擇,我發現下面有效率

$query = 'SELECT * 
    FROM user 
    WHERE 1 = 1 '; 

    if(!empty($serviceNumber)) 
    { 
     $query .= ' and serviceNumber = ? '; 
     $params[] = $serviceNumber; 
    } 
    if(!empty($name)) 
    { 
     $query .= ' and userName = ? '; 
     $params[] = $name; 
    } 
    if(!empty($status)) 
    { 
     $query .= ' and status = ? '; 
     $params[] =$status; 
    } 
    if(!empty($params)) 
    { 

     $sth->execute($params); 
     $dbh->prepare($query); 
     $result= mysqli_query($dbcon,$sth); 
       if(!$result) 
       { 
        die('Could not get data: ' . mysqli_error()); 

       } 
    } 
    else 
    { 
     echo 'Missing Values'; 
    } 

,但我得到$某事物未定義的變量,所以我有沒有有效的方法或我可以糾正這個錯誤。如果任何人都可以幫助表示讚賞。

+0

根據代碼,你的代碼中沒有$ ssh變量,可以添加完整的代碼代碼在這裏,如果可能? –

+1

這是完全錯誤的;你在混合使用mysqli和PDO語法,並且語句的順序沒有任何意義。所以,即使你使用'prepare'行正確地定義了'$ sth',它仍然不起作用。 – jeroen

+0

@MaulikSavaliya你在說什麼?你在哪裏看到一個'$ ssh'變量? – Loko

回答

0

這段代碼只能用PDO工作(即使你反轉錯誤的順序準備執行調用)。

對於mysqli,你必須總是明確地綁定你的值,這是背後明顯的痛苦。幸運的是,由於PHP版本5.6 there is an argument unpacking operator that helps

$stmt = $db->prepare($query); 
$types = str_repeat('s', count($params)); 
$statement->bind_param($types, ...$params); 
$statement->execute(); 
$res = $statement->get_result(); 
$data = $res->fetch_all(); 

然而,如果你的PHP版本不符合此要求或get_result()函數不支持,我會強烈建議忘掉mysqli的轉來轉去PDO。這會讓你的代碼變得更簡單 - 這更重要 - 可以與任何PHP版本無關:

$sth = $dbh->prepare($query); 
$sth->execute($params); 
$data = $sth->fetchAll(); 
+0

可以你請參考下面answer.i的方式不能獲取數據 – shashini