0

要するに、私は趣味でプログラミングしています。Safari 5 で SQLite データベースにデータを INSERT しようとしています。

自家製の拡張機能を使用しているため、インジェクション攻撃の心配はありません。これは、アクセスするサイトからデータを収集するためだけに使用するためです。

私のトランザクションは、「DOM 変更イベント」からのデータを含むループの反復ごとに行を挿入し、最大 20 回ほど反復します) に渡された変数が正しく表示されません。「console.log(variable)」を呼び出すと、正しいデータが含まれていることが示されますが、INSERT は、正しくインクリメントする最初の var を除いて、レコードごとに正しい (異なる) データを挿入しません (私自身のインクリメントメカニズムを介して他の不正な変数と同じスコープ)。

「労働者」が重要であることについて読んだことがありますが、彼らについては何も知りません。

注意 Windows 7 プロ

感謝して受け取ったポインタ - ありがとう。


enter code here: HandleDOM_Change = function()  {
for (p=0; p<snip.length; p++)   { 
    title = snip[p].getElementsByClassName('title')[0].firstChild.textContent;
    value = snip[p].getElementsByClassName('value')[0].firstChild.textContent;
    lang = snip[p].getElementsByClassName('lang')[0].textContent;
    if (hP[p] != lang)  {
        ++count;
        id = count;
        db.transaction(function (tx) {
             console.log("events:" +events+ " title:" +title+ " value/p+1/lang: " +value+ ", " +(p+1)+ ", " +lang);
             tx.executeSql('INSERT INTO foo (id, text, time, name) VALUES (?, ?, ?, ?)', [id, title, value, lang]);
        },myTransactionErrorCallback,myTransactionSuccessCallback);
    hP[p] = lang;
    }
}
++events;

}

//グローバル変数: events INTEGER, snip ARRAY, count INTEGER ばかげた構文の問題をお許しください - 読みやすくするために一部のもみ殻を削除する必要がありました - しかし本質は、変数に必要なものが含まれていることをコンソール ログが報告することにありますが、'tx .executeSql' はいいえと言います。

注意: 問題を見つけようとして、挿入された値からすべての制約が削除されました。宣言では主キーでさえ主張されていません (これはグローバル レベルで以前に発生します)。また、明確にするために、「id」は適切にインクリメントされ、データベースに記録されますが、他の3つは変更されない値で挿入されます-ログレポートとは対照的です(ログはIDを出力しないことに気付きましたが、出力しましたクレンジング前 - 正直に)。

どうもありがとう。

4

1 に答える 1

0

私はそれを手に入れたと思います。各反復中に再割り当てされる「タイトル」などの「一般的な」変数は、単純な整数ではありません (「p」はパズルまでですが、ここでは参照と値が関係していると思います) は、最後の値で取得され、したがって、レコーダーであるループの最後の反復中の値は常にです。解決するために、これらの値を新しい配列に簡単に再記録し、現在の配列の長さなどを心配する必要がないように、「push(..)」と「pop(..)」を使用しましたその配列。先に進むことができると言うのが早すぎないことを願っています。ご覧いただきありがとうございます。

于 2010-12-16T11:59:09.810 に答える