【发布时间】:2014-07-16 16:37:44
【问题描述】:
我正在尝试根据已勾选的复选框过滤 mysql 结果。我的查询适用于第一次检查,但在第二个过滤器上没有返回任何内容。我的复选框数组是 $_POST['country'] 我在 GetSQLValueString 函数中内爆它以创建逗号分隔值 - (英国、法国)等。我使用 MySQL IN 子句进行多项选择。
我需要它来过滤多个国家/地区选择
if (isset($_POST['country_submit']) && $_POST['country'] != '') {
mysql_select_db($database_tub, $tub);
$query_trade = sprintf("
SELECT u.user_id,
u.contact_person,
u.company,
u.country,
u.pic_small,
u.website,
SUM(u.trader_or_bond = %s
AND t.user_id IS NOT NULL) AS count
FROM users u
LEFT JOIN trading t ON u.user_id = t.user_id
WHERE u.trader_or_bond = %s AND u.country IN(%s)
GROUP BY u.user_id
ORDER BY COUNT(t.user_id) DESC",
GetSQLValueString('trader', "text"),
GetSQLValueString('trader', "text"),
GetSQLValueString(implode(',', $_POST['country']), "text"));
$trade = mysql_query($query_trade, $tub) or die(mysql_error());
}
【问题讨论】:
-
$_POST['country'] 是一个(非数字)字符串数组吗?如果是这样,
u.country IN(%s)将变为u.country IN(United Kingdom, France),这是 SQL 中的错误。正确的形式是u.country IN("United Kingdom", "France")(由“转义”)。 -
我可以在周边国家使用单引号,例如 $SingleQuotes = "'".implode("','", $_POST['country'])."'";我必须将它直接放入 IN($SingleQuotes) 子句中,这样它就不会通过 GetSQLValueString 函数 - 我如何首先让它安全?
-
你能提供一个简单的例子让我明白你的意思吗?
标签: mysql