繁体   English   中英

(PHP)MySQL选择查询,数组来自$ _GET

[英](PHP) MySQL select query with array from $_GET

我想做的是从这样的搜索URL中进行:

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

如果您的GET参数与db字段匹配,则可以像这样构建查询字符串:

$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...

要访问$ _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"'");

清理将是类似于mysql_real_escape_string()的函数,或者是您自己的清理输入的函数。 确保检查是否使用isset()函数设置了$ _GET变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM