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;如预期的那样,它显示了这个

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

有没有办法纠正这个问题?我尝试使用 WHERE 1=1 子句的原因是,当所有变量都等于 NULL 时,查询会返回表中的所有行。

4

3 回答 3

1

我猜你的数据库中没有与你的条件相匹配的数据。或者您的名称区分大小写。

例子 :

     cpu='Intel i3'   // with big I

     cpu='intel I3'   // with big I

     cpu='intel  i3'  // double space.

或者,如果您有大字符串,请考虑使用LIKE

    $qry.= " AND cpu LIKE '%$cpu%' " ;
于 2013-09-21T19:00:20.467 回答
0

这也是错字吗($resul_T_)?

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

你是如何设法失去那个't'然后又把它找回来的?;)

于 2013-09-21T18:54:28.177 回答
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);
?>
于 2013-09-21T19:09:02.343 回答