Php 在查询中传递字符串而不使用引号'';

Php 在查询中传递字符串而不使用引号'';,php,mysql,cakephp,cakephp-1.2,Php,Mysql,Cakephp,Cakephp 1.2,我有以下查询代码: $conditions[]=array('codiceBiblio IN (?)'=> $tot); 其中$tot是一个字符串(例如:234556745655678) 在这种情况下,查询将是: SELECT [...] WHERE codiceBiblio IN ('2345,5657,4565,5678') SELECT [...] WHERE codiceBiblio IN (2345,5657,4565,5678) 但它只会返回第一条记录 所以应该是: SE

我有以下查询代码:

$conditions[]=array('codiceBiblio IN (?)'=> $tot);
其中$tot是一个字符串(例如:234556745655678)
在这种情况下,查询将是:

SELECT [...] WHERE codiceBiblio IN ('2345,5657,4565,5678')
SELECT [...] WHERE codiceBiblio IN (2345,5657,4565,5678)
但它只会返回第一条记录

所以应该是:

SELECT [...] WHERE codiceBiblio IN ('2345,5657,4565,5678')
SELECT [...] WHERE codiceBiblio IN (2345,5657,4565,5678)
我怎么做


如何构建查询

我有一个查询代码:

// General Query
$conditions = array(
    'editore LIKE' => "%$e%",
    'titolo LIKE' => "%$t%"
);
我用用户的选择填充$conditions,例如:

if ($anno&&$anno2)
    $conditions[] = array('anno BETWEEN ? AND ?' => array($anno,$anno2));

if (isset($menu)&&$menu!='')
    $conditions[]=array('classe LIKE' => "%$menu%");

只需使用数组并省略()中的
子句。手册()提供了以下示例:

array('Company.status' => array('inactive', 'suspended'))
。。。这将生成以下SQL:

`Company`.`status` IN ('inactive', 'suspended')
如果
$tot
是一个类似于
23455665745655678
的字符串,则需要先将其删除


免责声明:这适用于蛋糕2,不确定1.2。

阿尔瓦罗·G.维卡里奥的建议是正确的,但你也可以这样做:

$conditions[]=array('codiceBiblio IN (' . $tot . ')');

在回答这个问题之前,我们需要更多关于如何生成查询的信息。@t我更新了我的问题,尝试了,但不起作用,生成的sql是codiceBiblio=('118956118746118456')@Ettore-您先创建了数组吗?我的印象是,如果Cake/1不支持此功能,它可能会忽略它或触发错误,但不会将所有数组项合并到一个字符串中。@ÁlvaroG.Vicario这在CakePHP 1.2中也应该有效,多年来已经多次使用过它。完整示例类似于
$conditions[]=array('codiceBiblio'=>$tot)
但正如您所提到的,
$tot
如果包含多个值,则应转换为数组。此方法是在CakePHP中执行此类查询的首选方法,CakePHP将处理值的转义/清除。不同于公认的答案@阿纳尔。维加里奥,我创建了一个数组,现在你的代码工作了,谢谢Lavo G.VigiRo的回答比我的好:-考虑给他正确的答案蜱。虽然这可能会起作用,CaKEPHP可能不会逃脱/消毒价值$TT,这将使您的应用程序易受SQL注入攻击。对于Cake 1.2不是100%确定,但一定要测试它,或者选择Alvaros答案