CI3.0的where_in有问题
$this->db->where_in('stockname.stock_no',$newid);实际上返回
`stockname`.`stock_no` IN('(0,2677,2272,2432) ')
根本上返不回值,要改成IN((0,2677,2272,2432) )才能正常返值,where_in用字符,会无故加上\',也返不了值。
英文手册里说在where_in加了一个参数过滤,但里面说得不清不楚,直接用TSQL解决算了 $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-19 12:03
$newid储存值是什么?说得不清不楚!从结果去猜,$newid值似乎是"(0,2677,2272,2432) "。
若是where in四 ...
我是想做股票板块搜索的,分别试过INT类型的ID和varchar的股票编码都不行
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注入。若编程者是故意的,必须加上参数不去进行自动处理。
这都非常基本的编程知识,还是不明白出问题的责任谁属?
页:
[1]