2013-09-21 59 views
0

我要創建基於用戶的輸入接收的值動態查詢時顯示任何結果,該變量的值是通過GET 張貼當我現在運行這個運行此查詢

$qry = "SELECT* FROM LAPTOP WHERE 1=1"; 
$resul = mysqli_query($qry); 
retrieve($resul); 

該表的所有內容都顯示沒有任何錯誤,(檢索此功能顯示基於查詢的所有結果),但是當我嘗試修改它這個樣子,我得到了一個空白頁面

$qry = "SELECT * FROM LAPTOP WHERE 1=1"; 
if(!empty($company)) 
{ 
$qry .= " AND company='$company'" ; 
} 
if(!empty($cpu)) 
{ 
$qry.= " AND cpu='$cpu' " ; 

} 
if(!empty($lifestyle)) 
{ 
$qry.= " AND lifestyle='$lifestyle' " ; 

} 
if(!empty($display)) 
{ 
$qry.= " AND display='$display'" ; 

} 
if(!empty($ram)) 
{ 
$qry.= " AND ram='$ram' " ; 

} 
if(!empty($HDD)) 
{ 
$qry.= " AND HDD='$HDD' " ; 
} 
echo $qry; 
$result= mysqli_query($qry) || die(mysqli_error()) ; 
retrieve($result) ; 
$p = basename($_SERVER['REQUEST_URI']) ; 

的結果echo $qry;正如預期的那樣, t顯示此

SELECT * FROM LAPTOP WHERE 1=1 AND company='Asus' AND cpu='intel i3' 

有沒有辦法解決這個問題?我嘗試使用WHERE 1 = 1子句的原因是,當所有變量都等於NULL時,查詢將返回表中的所有行。

+0

所以你有'SELECT *'或'SELECT *'...並且,你的查詢似乎因爲某種原因失敗。所以不正確的table_name,column_name ...或輸入「打破」你的SQL。 – djot

+0

@djot我試着SELECT *和SELECT *只是因爲我不確定語法,我也嘗試過把它分成幾部分,它好像工作正常,我認爲第一個WHERE clauase存在一些問題,但是我不能圖其他選擇。 – CAO

+0

不,'WHERE 1 = 1 AND ...'很好......超級聰明......我在我的項目中使用了數千次。 – djot

回答

0

這是一個錯字($resul_T_)?

$resul = mysqli_query($qry); 
retrieve($resul); 

您是如何設法丟失't',並在以後拿回來的? ;)

+0

我嘗試了不同頁面上的$ resul東西。 – CAO

1

我想你的數據庫中沒有與你的條件相匹配的數據。或者你對名稱區分大小寫。

例如:

 cpu='Intel i3' // with big I 

    cpu='intel I3' // with big I 

    cpu='intel i3' // double space. 

或者如果你有大串,想用LIKE

$qry.= " AND cpu LIKE '%$cpu%' " ; 
+0

LIKE的用途究竟是什麼? – CAO

+0

其他建議是看你是否包含檢索功能。 –

+0

在這裏學習如何LIKE工程http://www.w3resource.com/mysql/comparision-functions-and-operators/like.php –

0

正如其他人指出,這可能只是你的查詢不匹配任何記錄。

無論如何,我通常在類似的情況下做的是把所有的條件放在一個數組中,然後用'AND'打亂數組。這樣你就不必擔心1 = 1,不管你是否有0,1個或更多的條件。

<?php 
$qry = "SELECT * FROM LAPTOP"; 

$conditions = array(); 

$cpu = 'Intel'; 
$ram = '24GB'; 

if(!empty($cpu)) 
{ 
    $conditions[] = "cpu='$cpu'"; 
} 
if(!empty($lifestyle)) 
{ 
    $conditions[] = "lifestyle='$lifestyle'"; 
} 
if(!empty($display)) 
{ 
    $conditions[] = "display='$display'"; 
} 
if(!empty($ram)) 
{ 
    $conditions[] = "ram='$ram'"; 
} 
if(!empty($HDD)) 
{ 
    $conditions[] = "HDD='$HDD'"; 
} 

if(count($conditions) > 0) 
{ 
    $qry .= " WHERE "; 
    $qry .= implode(" AND ", $conditions); 
} 

print_r($qry); 
?> 
+0

那麼你應該嘗試一下;) –