Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据复选框筛选mysql结果_Mysql - Fatal编程技术网

根据复选框筛选mysql结果

根据复选框筛选mysql结果,mysql,Mysql,我试图根据勾选的复选框过滤mysql结果。我的查询在第一次检查时有效,但在第二次筛选时不返回任何内容。我的复选框数组是$_POST['country'],我在GetSQLValueString函数中内爆它以创建逗号分隔的值-(英国、法国)等。我使用MySQL in子句进行多选 我需要它来过滤多个国家/地区选择 if (isset($_POST['country_submit']) && $_POST['country'] != '') { mysql_select_

我试图根据勾选的复选框过滤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());
} 

我已经想到了这一点,但不确定MySQL注入是否安全,加上它没有我想要的那么干净

if (isset($_POST['country_submit']) && $_POST['country'] != '') {   

$SingleQuotes = "'".implode("', '", array_map('mysql_real_escape_string', $_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($SingleQuotes)
GROUP BY u.user_id
ORDER BY COUNT(t.user_id) DESC", 
GetSQLValueString('trader', "text"), 
GetSQLValueString('trader', "text"));
$trade = mysql_query($query_trade, $tub) or die(mysql_error());
}

$\u POST['country']是一个字符串数组(不是数字)吗?如果是这样,
u.country IN(%s)
将变成
u.country IN(英国、法国)
,这是SQL中的一个错误。正确的格式应该是
u.country IN(“英国”、“法国”)
(转义词”)。我可以通过使用单引号(如$SingleQuotes=“””)。introde(“,”,$”POST['country')。“””。我必须直接将其放入IN($SingleQuotes)中子句,所以它没有经过GetSQLValueString函数-如何首先使其安全?能否提供一个快速示例,以便我了解您的意思?