-2

如果我这样做,我需要能够在执行查询之前检查数组的所有元素是否有效:

$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,但它会在它进入数组中的“测试”之前插入前两个值。这只是我弥补我遇到的问题的一个随机示例。

最好的方法是什么?

4

3 回答 3

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();
}
于 2013-01-21T20:16:28.087 回答
0

如果它们都是整数,我只想将数组中的值插入数据库

当您需要检查数组时,循环始终是您的朋友

$fault = 0;
foreach ($arr as $val) {
    if (!is_int($val)) {
        $fault = 1;
        break;
    }
}
于 2013-01-21T20:10:09.023 回答
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 用于您的查询/循环,因为您可以确定它们都是整数。

于 2013-01-21T20:11:27.280 回答