0

XML ファイルからデータを収集するループを実行しています。2000 行以上が完了した後、後で実行される検証ルールがいくつかあります。安全であれば、MySQL データを保存したいと思います。前述のループで、すべての MySQL クエリを配列 (ほぼ 2000 クエリ) に保存し、検証ルールが終了した後にループで実行したいと考えています。

これは悪い考えですか?もしそうなら、クエリを保存して後で実行するための最良のアイデアは何ですか?

あなたが理解していない場合、私が話していることのアイデアを与えるために:

foreach($xml->object as $control) {
// Stores relative xml data here
}

if(1=1) // Validation rules run

for(...) { // For Loop for my queries (2000 odd loop)

Mysql_Query(..) 
}
4

3 に答える 3

2

あなたができることは、それをサポートするライブラリ(PDOまたはmysqli)の準備済みステートメントを使用することです。PDO の場合:

$stmt = $pdo->prepare("INSERT INTO t1 VALUES (:f1, :f2, :f3)");
$stmt->bindParam(":f1", $f1);
$stmt->bindParam(":f2", $f2);
$stmt->bindParam(":f3", $f3);

foreach ($xml->obj as $control) {
    // create $array
}

if ($valid) {
    foreach ($array as $control) {
        $f1 = $control['f1'];
        $f2 = $control['f2'];
        $f3 = $control['f3'];
        $stmt->execute();
    }
}
于 2013-10-09T20:02:43.720 に答える
1

XML データ レコードを段階的に解析してデータベースにポストするよりも多くの RAM を使用するという事実を除けば、このアプローチには何の問題もありません。PHP を実行しているサーバーがあなたのものであれば、問題ありません。月額 5 米ドルの安価な共有ホスティング プランを使用している場合、メモリまたは実行時間の制限に遭遇する可能性があります。

あなたは「安全」について言及しました。データベースの更新のいずれかが失敗した場合、すべてのデータベースの更新を取り消さなければならないのではないかと心配していますか? その場合は、次の 2 つのことを行います。

  • テーブルに MyISAM アクセス方法を使用しないでください。

  • トランザクションを使用し、データベースのすべての変更を投稿したら、それをコミットします。

このトランザクション アプローチは優れています。転記プロセスが何らかの理由で失敗した場合、トランザクションをロールバックして開始点に戻ることができるからです。

于 2013-10-09T20:06:07.630 に答える