php - (PHP) MySQL 使用来自 $_GET 的数组选择查询

标签 php mysql

我想做的是从这样的搜索 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/

相关文章:

php - 如何使用jquery的$.ajax错误参数

php - 当我在循环中添加一个额外的字段时,while 循环不起作用

php - Symfony2 和 Twig - 检查 Assets 是否存在

php - 使用php从mysql数据库构建多维数组

php - Paypal (PHP) : unable to use client certificate (no key found or wrong pass phrase? )

php - 使用 PHP 从 sql 查询中获取特定的 JSON 数据

mysql - 忽略部分字符串和不同的

c - C语言中mysql_query的返回错误值是多少?

php - 如何在 PHP 中以正确的方式获取计数 (*)

mysql - SELECT 使用不同的外键值