我要做的是从搜索网址中删除:
search.php?president=Roosevelt,+F.&congress=&nomination_received_by_senate=&state=CT
对于这样的MySQL查询:
SELECT `name` FROM `nominations` WHERE president=`Roosevelt, F.` AND state=`CT`
我有一些代码从URL中删除任何空值,所以我有一个数组:
Array ( [president] => Roosevelt, F. [state] => CT )
从这个到SQL查询是给我带来麻烦的。我希望可能有一些简单的方法(通过PHP的join()或http_build_query()的某些变体)来构建查询,但似乎没有任何工作需要它,即使在搜索之后我也很想念。
不确定是否需要一些凌乱的循环,如果有一个简单的方法,或者我正在努力实现我的目标的方式是错误的,但我希望有人能够提供帮助。提前谢谢!
编辑:为了澄清,有时输入可能是空的(如此处的情况,congress和nomination_received_by_senate),我希望在解决方案中适应这一点。是的,我打算实现避免SQL注入的方法。我只列出了我计划的基础知识,希望对我的方法有所了解。
答案 0 :(得分:5)
如果您的GET参数与您的数据库字段匹配,您可以像这样建立您的查询字符串:
$field_array = array('president', 'congress', 'nomination_received_by_senate', 'state');
$query = 'SELECT `name` FROM `nominations` WHERE ';
$conditions = array();
foreach($field_array as $field) {
$value = $_GET[$field];
if(empty($value)) continue;
$condition = mysql_real_escape_string($field) . '` = ';
$quote = '';
if(!is_numeric($value)) $quote = '"';
$condition .= $quote . mysql_real_escape_string($value) . $quote;
$conditions[] = $condition;
}
$query .= implode(' AND ', $conditions) . ';';
//perform query here...
答案 1 :(得分:0)
要访问$ _GET变量,您只需执行$ _GET [“president”]和$ _GET [“state”]并获取信息。确保您清理输入。
$president = sanitize($_GET["president"]);
$state = sanitize($_GET["state"]);
$result = mysql_query("SELECT name FROM nominations WHERE president='".$president."' AND state='".$state"'");
Sanitize将是一个函数,如mysql_real_escape_string()或您自己的函数来清理输入。确保使用isset()函数检查是否设置了$ _GET变量。