mysql查询问题,其中(IN) - '和“

时间:2014-07-22 12:28:26

标签: php mysql

我有一个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.'');

3 个答案:

答案 0 :(得分:1)

首先,如果你想附加一些你的变量而不是这个:

$requete=''.$requete.'

使用$requete .= ' AND countries.code_iso="'.$pays.'"'; ..

关于您的IN("'.$arr.'")',如果$arrphp 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”