用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1754|回复: 4
收起左侧

[版本 3.x] CI3.0的where_in有问题

[复制链接]
发表于 2015-6-18 02:13:04 | 显示全部楼层 |阅读模式
$this->db->where_in('stockname.stock_no',$newid);
实际上返回

`stockname`.`stock_no` IN('(0,2677,2272,2432) ')
根本上返不回值,要改成IN((0,2677,2272,2432) )才能正常返值,where_in用字符,会无故加上\',也返不了值。
 楼主| 发表于 2015-6-18 02:31:53 | 显示全部楼层
英文手册里说在where_in加了一个参数过滤,但里面说得不清不楚,直接用TSQL解决算了
发表于 2015-6-19 12:03:00 | 显示全部楼层
$newid储存值是什么?说得不清不楚!从结果去猜,$newid值似乎是"(0,2677,2272,2432) "。

若是where in四个值,正常做法是

$newid = array(0, 2677, 2272, 2432);

而非

$newid = "(0,2677,2272,2432) ";

若$newid是array而出错,确是CI问题;若把$newid设为字串而出错,还要去怪责他人有问题...

无语了!
 楼主| 发表于 2015-6-20 11:35:09 | 显示全部楼层
燃雲 发表于 2015-6-19 12:03
$newid储存值是什么?说得不清不楚!从结果去猜,$newid值似乎是"(0,2677,2272,2432) "。

若是where in四 ...

我是想做股票板块搜索的,分别试过INT类型的ID和varchar的股票编码都不行
发表于 2015-6-20 12:39:18 | 显示全部楼层
smartweb 发表于 2015-6-20 11:35
我是想做股票板块搜索的,分别试过INT类型的ID和varchar的股票编码都不行

INT类型的ID和varchar?

PHP什么时候有varchar类型?CI是PHP的框架,不是MySQL或其它数据库的框架。

$newid是PHP的变数,正常会使用PHP的array,使用字符串时,默认进行escape正常不过。

自行建立where in条件,做成字符串,直接送入,是绕过了CI的建立条件。

CI认为"(0,2677,2272,2432) "是一条数据记录而非四条数据记录,故此自动加上引号,避免SQL注入。若编程者是故意的,必须加上参数不去进行自动处理。

这都非常基本的编程知识,还是不明白出问题的责任谁属?

本版积分规则