用于在查询中使用数组的mysql安全性
我在一个数组中有一系列类别ID,它们进入我的查询,如下所示:用于在查询中使用数组的mysql安全性,mysql,Mysql,我在一个数组中有一系列类别ID,它们进入我的查询,如下所示: WHERE category IN(".implode(',',$categories)) 现在为了安全起见,我想确定数组中的每个值实际上都是一个整数。有没有一种简单的方法可以做到这一点,或者我应该分解我的数组,(int)$val每个数组,然后重新构造数组 谢谢 Matt遗憾的是,使用数据库无法逃避整个查询的“内部”部分。所以你有两种可能: a) 创建临时表,插入并连接到原始表。(如果您在where-子句中没有想要的int,并且您
WHERE category IN(".implode(',',$categories))
现在为了安全起见,我想确定数组中的每个值实际上都是一个整数。有没有一种简单的方法可以做到这一点,或者我应该分解我的数组,(int)$val每个数组,然后重新构造数组
谢谢
Matt遗憾的是,使用数据库无法逃避整个查询的“内部”部分。所以你有两种可能: a) 创建临时表,插入并连接到原始表。(如果您在
where
-子句中没有想要的int,并且您正在处理非常大的数据集,则可能会首选:
- 创建临时表:
创建临时表yourtestable(tempColumn varchar(42))ENGINE=MEMORY;
- 使用准备好的语句插入所有值以防止SQL注入
- 查询数据库:
SELECT FROM orig_table internal JOIN yourtestable ON category=tempColumn
WHERE category IN(".implode(',',array_map($categories, function($a){return (int)$a;} ) )
在这里,您得到了一个新数组,该数组包含您提供的所有返回值,在本例中,它只是一个将每个值转换为int的函数。该数组直接输入到
内爆
,因此您不需要任何新变量、全局函数、用于
-循环或其他任何东西。遗憾的是,不可能使用数据库对整个查询的“in”部分进行转义。所以你有两种可能:
a) 创建临时表,插入并连接到原始表。(如果您在where
-子句中没有想要的int,并且您正在处理非常大的数据集,则可能会首选:
- 创建临时表:
创建临时表yourtestable(tempColumn varchar(42))ENGINE=MEMORY;
- 使用准备好的语句插入所有值以防止SQL注入
- 查询数据库:
SELECT FROM orig_table internal JOIN yourtestable ON category=tempColumn
WHERE category IN(".implode(',',array_map($categories, function($a){return (int)$a;} ) )
这里,您将得到一个新数组,它包含您提供的所有返回值,在本例中,它只是一个将每个值转换为int的函数。该数组直接输入到
内爆
,因此您不需要任何新变量、全局函数,用于循环或其他任何内容。为我们播送php脚本的完整片段为我们播送php脚本的完整片段