我有一个sql查询的问题。
查询有效,直到我添加第三行:AND procurements.activity1 IN("'.$arr.'")'
。
我猜'
和"
未正确设置。
IN $arr
是一个数组..
安全检查在这里不是问题,正在处理它们。
我的问题完全在于IN("'.$arr.'")'
行。
非常感谢您的帮助。
if (isset($_GET['continent'])) {$requete= 'countries.region = "'.$continent.'"';}
if (isset($_GET['pays'])) {$requete=''.$requete.' AND countries.code_iso="'.$pays.'"';}
if (isset($_GET['activity1'])) {$requete=''.$requete.' AND procurements.activity1 IN("'.$arr.'")';}
if (isset($_GET['type_org'])) {$requete=''.$requete.' AND organisations.type_org="'.$type_org.'"';}
$query = $mysqli->query('SELECT
countries.code_iso,
countries.region,
countries.fr,
countries.en,
countries.flag,
procurements.id,
procurements.ref_org,
procurements.ref_bid,
procurements.activity1,
procurements.url,
procurements.code_cpv,
procurements.date_entered,
procurements.date_expire,
procurements.country_exec,
organisations.ref_org,
organisations.name_organisation,
organisations.type_org,
organisations.cp,
organisations.city,
organisations.country
FROM countries, procurements, organisations
WHERE countries.code_iso = procurements.country_exec
AND organisations.ref_org = procurements.ref_org
AND '.$requete.'');
答案 0 :(得分:1)
首先,如果你想附加一些你的变量而不是这个:
$requete=''.$requete.'
使用$requete .= ' AND countries.code_iso="'.$pays.'"';
..
关于您的IN("'.$arr.'")'
,如果$arr
是php array
,那么您无法将其分配给query
,而是使用implode来合并您的{{1}}数组成一个字符串..
答案 1 :(得分:0)
最初的问题似乎是你试图在数组中连接。但是,根据你的评论,情况并非如此。
但是,您声明使用: -
$arr = implode(',', $_GET['activity1']);
但是你的代码是: -
if (isset($_GET['activity1'])) {$requete=''.$requete.' AND procurements.activity1 IN("'.$arr.'")';}
你会找到类似的东西: -
AND procurements.activity1 IN("1,2,3")
要么改变
$arr = implode(',', $_GET['activity1']);
到
$arr = implode('","', $_GET['activity1']);
或更改
if (isset($_GET['activity1'])) {$requete=''.$requete.' AND procurements.activity1 IN("'.$arr.'")';}
到
if (isset($_GET['activity1'])) {$requete=''.$requete.' AND procurements.activity1 IN('.$arr.')';}
答案 2 :(得分:0)
您可以使用此代码
$requete = '';
if (isset($_GET['continent'])) {$requete = ' AND countries.region = "'.$continent.'"';}
if (isset($_GET['pays'])) {$requete .=' AND countries.code_iso="'.$pays.'"';}
if (isset($_GET['activity1'])) {$requete .=' AND procurements.activity1 IN("'.implode(',',$arr).'")';}
if (isset($_GET['type_org'])) {$requete .=' AND organisations.type_org="'.$type_org.'"';}
并在查询中删除$ requete变量
之前的“AND”