我需要能够在执行查询之前检查数组的所有元素是否有效,如果我这样做:
$arr = array(5, 3, 'test', 23, 9);
$query = $members->prepare("insert into mytable(a) values(:a)");
foreach ($arr as $val) {
if (is_int($val)) {
$query->execute(array(':a'=>$val));
}
}
我只想将数组中的值插入到数据库中(如果它们都是ints
),但它在数组中的'test'之前插入前两个值。这只是我为我所遇到的问题做出的一个随机例子。
最好的方法是什么?
答案 0 :(得分:2)
有两种方法可以解决这个问题:
1)遍历所有值并首先验证它(你真的应该验证不受控制的数据)。
2)如果你使用PDO / INNOdb启动一个事务运行该循环并且在验证回滚失败并且退出循环。
例如
$db->beginTransaction();
$arr = array(5, 3, 'test', 23, 9);
$query = $members->prepare("insert into mytable(a) values(:a)");
$success = true;
foreach ($arr as $val) {
if (is_int($val)) {
$query->execute(array(':a'=>$val));
} else {
$success = false;
$db->rollback();
break;
}
}
if($success) {
$db->commit();
}
答案 1 :(得分:0)
我只想将数组中的值插入到数据库中(如果所有这些都是整数)
当你需要检查数组时,循环总是你的朋友
$fault = 0;
foreach ($arr as $val) {
if (!is_int($val)) {
$fault = 1;
break;
}
}
答案 2 :(得分:0)
http://php.net/manual/en/function.array-filter.php
怎么样?示例:
$arr = array(5, 3, 'test', 23, 9);
$nicearr = array_filter($arr, "getNumbersOnly")
function getNumbersOnly($var)
{
return is_int($var);
}
然后只需使用$ nicearr进行查询/循环,因为您可以确定它们都是整数。