(PHP)MySQL选择带有$ _GET数组的查询

时间:2010-10-15 06:13:26

标签: php mysql

我要做的是从搜索网址中删除:

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注入的方法。我只列出了我计划的基础知识,希望对我的方法有所了解。

2 个答案:

答案 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变量。