[英](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.