使用自定义变量和PHP准备语句

时间:2017-03-08 14:44:37

标签: php mysqli

我来了......我为用户提供了搜索功能,如下所示:

if ($_GET['s_country']){    
   $s_country = htmlentities($_GET['s_country'],ENT_QUOTES,"UTF-8");
   $s_country=trim($s_country);
   $s_country_row = " and country= ?";
} else {
   $s_country="";
   $s_country_row = " and (country= ? or not country= '')";
}
$s_city = "";
$s_city_row = " and (city= ? or not city= '')";
if ($_GET['s_city']){        
   $s_city = strip_tags($_GET['s_city']);
   $s_city=trim($s_city);
   $s_city_row = " and city= ?";
} 

$search = mysqli_prepare($dbconnect, "SELECT id FROM user WHERE gender=? $s_country_row $s_city_row");
mysqli_stmt_bind_param($search, 'iss', $s_gender, $s_country, $s_city);

在上面的例子中,我用自己的方式来解雇变量。我需要解除/删除未搜索或没有输入的变量。

如果未搜索“country”,则应返回包含所有“country”值的所有行。

有没有更好的方法呢?(如果没有prepare语句,很容易定制所有内容,但我希望安全性不会降低灵活性。)

感谢您阅读本文

1 个答案:

答案 0 :(得分:1)

$country = isset($_GET['s_country'])? " AND country=\'$_GET['s_country']\'" : '';
$query = " SELECT id FROM user WHERE gender=? $country ";

这是伪想法 这里的查询是以这样的方式形成的 - 如果它包含国家,那么:SELECT id FROM user WHERE gender =?和国家='美国&#39 ;; - 如果未定义国家/地区,则:SELECT id FROM user WHERE gender =?

由于第二个查询中没有国家/地区条件,因此会抛出具有特定性别的所有国家/地区行