2013-09-21 61 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

那么你应该尝试一下;) –