我正在尝试在数据库中查询“product_id”包含在产品ID数组中的记录.
该数组是多选输入(< select>)的结果,如下所示:
$clients = Array ( [0] => 80000016-1302638679 [1] => 8000003B-1329924004 )
我想将该数组传递给sql语句的“IN”子句,例如:
$sql = "SELECT * FROM sales WHERE product_id IN (".$clients.")";
function format_array($array){ return implode(',',$array); } }
如 …
$sql = "SELECT * FROM sales WHERE product_id IN (".format_array($clients).")";
这导致了这个查询:
SELECT * FROM sales WHERE product_id IN(80000016-1302638679,8000003B-132992400)
……而且这个错误:
‘where子句’中的未知列’8000003B’
我究竟做错了什么?任何帮助是极大的赞赏!如果需要,我可以澄清这个问题:)
解决方法
有一个更好的方法
您在评论中提到您正在使用CodeIgniter.除非你正在制作一些非常复杂的东西,否则当你内置where_in
时,没有任何实际的理由可以构建自己的自制查询.
如果这不起作用,那么就有了很好的产品escape
.
好的,所以,你有大多数人说你需要引用这些项目并给你这个:
function createInClause($arr) { return '\'' . implode( '\',\'',$arr ) . '\''; }
但如果您有可能输入有问题(例如'); DROP TABLE STUDENTS; --
),这实际上是不够的.为防止这种情况,您需要确保检查SQL injection:
function createInClause($arr) { $tmp = array(); foreach($arr as $item) { // this line makes sure you don't risk a sql injection attack // $connection is your current connection $tmp[] = MysqLi_escape_string($connection,$item); } return '\'' . implode( '\',$tmp ) . '\''; }
原文地址:https://www.jb51.cc/mssql/84032.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。