在查询中使用Clause IN作为字符串

时间:2018-06-13 09:50:13

标签: php ms-access pdo

我与 MDB数据库访问的PDO连接。 (没有MYSQL)。

我要对普罗旺斯数组(以及其他字段)进行SELECT查询(INNER JOIN TO 2 TABLES)。

表点击率

| ID | CTR  | PROVENCE_CODE |
--------------------
| 1  |  A1  | MI   |
--------------------
| 2  |  A2  | BO   |
--------------------
| 3  |  A3  | MI   |
--------------------

普罗旺斯表:

| ID | CODE | NAME |
--------------------
| 1  |  MI  | Milan|
--------------------
| 2  |  BO  | Bolog|
--------------------
...

| 110|  ZA  | Zaga |
--------------------

搜索由PROVENCE.CODE完成,没有ID,所以目前我使用LIKE(我搜索精确值):

$sql = " SELECT * FROM CTR INNER JOIN PROVENCE ON ( CTR.PROVENCE_CODE = PROVENCE.CODE ) WHERE ( a list of other conditions ) AND ";

$sql .= "(";

foreach ( $provences as $provence ) {

  $sql .= "PROVENCE.CODE LIKE ? OR ";                       
  $vars[] = $provence;

}

$sql = rtrim($sql, " OR ");
$sql .= ")";

$s = $db->prepare($sql);
$s->execute($vars);
$ris= $s->fetchAll(PDO::FETCH_ASSOC);

查询适用于一定数量的PROVENCE ....但如果我在查询中插入所有110,我会收到错误QUERY TOO COMPLEX。

我尝试过改变:

            $sql .= " AND ( PROVENCE.CODE IN (";

            foreach ( $provences as $provence ) {

                $sql .= "?', ";

                $vars[] = $provence;

            }

            $sql = rtrim($sql, ", ");
            $sql .= "))";

但是我得到了意想不到的结果。例如,如果我只插入" MI",我得到CTR表的所有3个条目而不是预期的2个结果。我不知道它是否是MDB访问的PDO问题

这是我使用的REAL查询:很长

string 'SELECT DISTINCT [05CTR].[05ID], [01Anagrafica].[01ID] FROM 95TipiPagamento RIGHT JOIN (((44Domini RIGHT JOIN (((07PacchettiServizi RIGHT JOIN 06Servizi ON [07PacchettiServizi].[07ID] = [06Servizi].[06Pacchetto]) RIGHT JOIN ((04Tipicontratti RIGHT JOIN ((02Tipicontatti RIGHT JOIN (01Anagrafica LEFT JOIN 03ContattiAnagrafica ON [01Anagrafica].[01ID] = [03ContattiAnagrafica].[03Anagrafica]) ON [02Tipicontatti].[02ID] = [03ContattiAnagrafica].[03Tipocontatto]) RIGHT JOIN 05CTR ON [01Anagrafica].[01ID] = [05CTR].[05Anagrafica]) ON [04Tipicontratti].[04ID] = [05CTR].[05Contratto]) LEFT JOIN 08CodiciCTR ON [05CTR].[05ID] = [08CodiciCTR].[08CTR]) ON [06Servizi].[06ID] = [08CodiciCTR].[08Codice]) LEFT JOIN 45ElencoDomini ON [05CTR].[05ID] = [45ElencoDomini].[45IDcontratto]) ON [44Domini].[44ID] = [45ElencoDomini].[45IDdominio]) LEFT JOIN 47ConsulentiAssociati ON [05CTR].[05ID] = [47ConsulentiAssociati].[47IDContratto]) LEFT JOIN 24Pagamenti ON [05CTR].[05ID] = [24Pagamenti].[24Contratto]) ON [95TipiPagamento].[95ID] = [24Pagamenti].[24IDTipoPagamento] WHERE 1 AND (( [05CTR].[05Numerocontratto] LIKE ? OR [05CTR].[05Numerocontratto] LIKE ? ) OR ( [01Anagrafica].[01Ragionesociale] LIKE ? OR [01Anagrafica].[01Ragionesociale] LIKE ? ) OR ( [03ContattiAnagrafica].[03Contatto] LIKE ? OR [03ContattiAnagrafica].[03Contatto] LIKE ? )) AND ([01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ? OR [01Anagrafica].[01Provincia] LIKE ?)' (length=5790)

exception 'PDOException' with message 'SQLSTATE[22018]: Invalid character value for cast specification: -3030 [Microsoft][Driver ODBC Microsoft Access] Espressione troppo complessa (SQLExecute[-3030]

0 个答案:

没有答案