我想做的是从这样的搜索 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 注入(inject)的方法。我只列出了计划的基础知识,希望对我的方法有一些了解。
最佳答案
如果您的 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...
关于php - (PHP) MySQL 使用来自 $_GET 的数组选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3939889/