-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の「test」に到達する前に最初の2つの値を挿入します。これは、私が抱えている問題を補ったランダムな例です。

これを行うための最良の方法は何でしょうか?

4

3 に答える 3

2

これを処理するには、次の 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

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 に答える
0

配列の値がすべて int の場合にのみ、データベースに値を挿入したい

配列をチェックする必要がある場合、ループは常にあなたの味方です

$fault = 0;
foreach ($arr as $val) {
    if (!is_int($val)) {
        $fault = 1;
        break;
    }
}
于 2013-01-21T20:10:09.023 に答える