好吧所以我现在已经尝试了一段时间才能让它发挥作用,但必须有一个比我想的更好的解决方案。我是php / mysql的新手,所以不确定如何执行以下操作:
我有一个搜索框,其中包含国家/地区,州,城市的下拉列表 现在,如果用户只选择国家/地区并点击搜索,则需要按国家/地区过滤选择并显示其他内容。
if(!empty($_REQUEST['city']))
$city = $_REQUEST['city'];
else
$city= "%";
if(!empty($_REQUEST['state']))
$state= $_REQUEST['state'];
else
$state= "%";
if(!empty($_REQUEST['country']))
$country= $_REQUEST['country'];
select * from table where country = $country and state = $state and city = $city
问题是那些列是整数,所以我不能使用“%”来过滤它。我希望我能解释一下,任何帮助都非常受欢迎。提前致谢
答案 0 :(得分:3)
示例:
<?php
$conditions = array();
if(!empty($_REQUEST['city']))
$conditions[] = "city = " . mysql_real_escape_string($_REQUEST['city']);
if(!empty($_REQUEST['state']))
$conditions[] = "state = " . mysql_real_escape_string($_REQUEST['state']);
if(!empty($_REQUEST['country']))
$conditions[] = "country = " . mysql_real_escape_string($_REQUEST['country']);
$sql = 'select * from table ';
if(!empty($conditions))
$sql .= ' where '. implode(' AND ', $conditions);
$sql .= ' LIMIT 1000';
答案 1 :(得分:1)
$where = array();
if(!empty($_REQUEST['city'])) $where[] = "city = '".(int)$_REQUEST['city']."'";
if(!empty($_REQUEST['state'])) $where[] = "state = '".(int)$_REQUEST['state']."'";
if(!empty($_REQUEST['country'])) $where[] = "country = '".(int)$_REQUEST['country']."'";
$wherestring = if(count($where) != 0) ? " WHERE ".implode(' AND ', $where) : "" ;
$query = "SELECT * FROM table".$wherestring;
答案 2 :(得分:0)
您可能需要考虑编写多个查询字符串,一个用于国家,一个用于州和国家,一个用于城市,州和国家。或者,您可以根据必须使用的不同参数组装查询字符串。
示例:
if(isset() || isset() || isset() ) //make sure at least one is set
{
$query_string = "SELECT * FROM table WHERE ";
if(isset($_REQUEST['country']))
{
$country = $_REQUEST['country'];
$query_string .= " country = $country";
}
if(isset($_REQUEST['state']))
{
$state = $_REQUEST['state'];
$query_string .= " state = $state";
}
if(isset($_REQUEST['city']))
{
$city = $_REQUEST['city'];
$query_string .= " city = $city";
}
}
else
{
//Else, if none are set, just select all the entries if no specifications were made
$query_string = "SELECT * FROM table";
}
//Then run your query...
所以在英语中,你要做的第一件事就是检查你的参数,确保在尝试将空变量连接在一起之前有一些工作要做。 然后你创建基本查询字符串(只要我们有参数)并保持开放状态,这样我们就可以添加你需要的任何参数。 接下来检查每个参数,如果已设置,则将该参数连接到查询字符串的末尾。 最后通过将查询发送到SQL服务器来处理查询。
祝你好运!ħ
答案 3 :(得分:0)
这是我的建议。
我给你一个答案,即使你已经有三个。我认为我的代码眼睛可能更容易。
$_REQUEST
值,因为用户可能会通过提供假$_REQUEST
数据来中毒您的数据库。虽然可能有更好的方法,但请记住命令“mysql_real_escape_string($string)
”。-
$__searchWheres = array(); //Where we'll store each requirement used later
foreach( array('city','state','country') as $_searchOption) {
if ( ! empty( $_REQUEST[$_searchOption] ) ) {
$__searchWheres[] = $_searchOption . '= "' . mysql_real_escape_string( $_REQUEST[$_searchOption] ) . '"';
}
}
$__query = 'select * from table' . (count($__searchWheres) > 0 ? ' WHERE ' . implode(' AND ',$__searchWheres) : ''); //Implode idea also used by Frank Farmer
//Select from the table, but only add the 'WHERE' key and where data if we have it.
mysql_query($__query);