我有AA类系列ID的一个阵列中,他们进入我的查询,如:MySQL的安全
WHERE category IN(".implode(',',$categories))
现在出于安全目的,我想,以确保每个值来自数组实际上是一个整数。有没有简单的方法来做到这一点,或者我应该分解我的数组,(int)$ val每一个,然后再次构造数组?
谢谢!
马特
我有AA类系列ID的一个阵列中,他们进入我的查询,如:MySQL的安全
WHERE category IN(".implode(',',$categories))
现在出于安全目的,我想,以确保每个值来自数组实际上是一个整数。有没有简单的方法来做到这一点,或者我应该分解我的数组,(int)$ val每一个,然后再次构造数组?
谢谢!
马特
可悲的是,这是不可能逃脱使用数据库查询的整体“in'部分。所以你有两种可能性:
a)创建一个临时表,插入并连接到原来的表。 (在可能的情况下是首选,你不用INT你想拥有在where
-clause的和你的工作非常大的数据集:
create temporary table yourTempTable (tempColumn varchar(42)) ENGINE=MEMORY;
SELECT FROM orig_table INNER JOIN yourTempTable ON category = tempColumn
二)从技术上说,这是你所建议的解决方案:建立查询之前修改阵列。为了使代码更清晰可读,我建议使用array_map。然后,只需修改代码:
WHERE category IN(".implode(',',array_map($categories, function($a){return (int)$a;}))
在这里,你得到所有返回值的新阵列consisisting的callable你提供的,这是在这种情况下,只是其中的每一个值强制转换为一个int的函数。这个数组直接输入到implode
,所以你不需要任何新变量,全局函数,for
-loops或其他任何东西。
好的,谢谢我会试试! –
播下你的PHP脚本的完整片段 – Alex