我想要做的是从这样的搜索URL:
search.php?president=Roosevelt,+F.&congress=&nomination_received_by_senate=&state=CT
Run Code Online (Sandbox Code Playgroud)
对于这样的MySQL查询:
SELECT `name` FROM `nominations` WHERE president=`Roosevelt, F.` AND state=`CT`
Run Code Online (Sandbox Code Playgroud)
我有一些代码从URL中删除任何空值,所以我有一个数组:
Array ( [president] => Roosevelt, F. [state] => CT )
Run Code Online (Sandbox Code Playgroud)
从这一点到SQL查询是给我带来麻烦的.我希望可能有一些简单的方法(通过PHP的join()或http_build_query()的某些变体)来构建查询,但似乎没有任何工作需要它,即使在搜索之后我也很想念.
不确定是否需要一些凌乱的循环,如果有一个简单的方法,或者我正在努力实现我的目标的方式是错误的,但我希望有人可以帮助.提前致谢!
编辑:为了澄清,有时输入可能是空的(如本例中的情况,congress和nomination_received_by_senate),我希望在解决方案中适应这一点.是的,我打算实现避免SQL注入的方法.我只列出了我计划的基础知识,希望对我的方法有所了解.
如果您的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...
Run Code Online (Sandbox Code Playgroud)