为SQL“ IN”子句格式化PHP数组

我正在尝试在数据库中查询产品ID数组中包含“ product_id”的记录。

该数组是多重选择输入(<select>)的发布结果,如下所示:

$clients = 

Array (

[0] => 80000016-1302638679

[1] => 8000003B-1329924004

)

我想将该数组传递给SQL语句的“ IN”子句,例如:

$sql = "SELECT * FROM sales WHERE product_id IN (".$clients.")";

…但这是行不通的(错误:)Message: Array to string conversion

一些帖子建议使用此函数以适合SQL的方式格式化数组:

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)

…以及此错误:

Unknown column '8000003B' in 'where clause'

回答:

回答:

您在注释中提到您正在使用CodeIgniter。除非您使事情变得异常复杂,否则没有实际的理由应该在构建时构建自己的家庭式查询where_in

如果那不起作用,那么就很好escape


好的,所以,您大多数人都说您需要引用这些项目,并为此提供了:

function createInClause($arr)

{

return '\'' . implode( '\', \'', $arr ) . '\'';

}

但是,如果您有可能输入有问题的信息(例如,'); DROP TABLE STUDENTS; --。),这确实是不够的。为了防止这种情况,您需要确保检查SQL注入:

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 ) . '\'';

}

以上是 为SQL“ IN”子句格式化PHP数组 的全部内容, 来源链接: utcz.com/qa/423235.html

回到顶部