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答案