1

私はテーブルを持っています:プラットフォーム

このテーブルの列内:1。first_scan_date、2。next_scan_date 3. scan_frequency

今、私はWebベースのフォーミュラからそのような配列を持っています:

Array
(
    [scan_freq1] => Array
        (
            [0] => 0
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [first_scan_date1] => Array
        (
            [0] => 0000-00-00
            [1] => 0000-00-00
            [2] => 0000-00-00
            [3] => 0000-00-00
        )

    [next_scan_date1] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
        )

)

PHPの配列から取得したものを使用してデータベースで更新するにはどうすればよいですか?foreachのようなsmthが必要だと思いますが、手がかりはありません...

UPDATEプラットフォーム(first_scan_date、next_scan_date、scan_frequency)VALUES(?、?、?).. ..

ヘルプ?

4

3 に答える 3

1

以下の方法を試してください

$cnt = count($arr['scan_freq1']);
for($i=0;$i<$cnt;$i++){
  echo $arr['scan_freq1'][$i];
  echo $arr['first_scan_date1'][$i];
  echo $arr['next_scan_date1'][$i];

//now you have three values make query and update into db

$db->prepare(
     "UPDATE `platforms` SET `first_scan_date`=?, `next_scan_date`=?,
     `scan_frequency`= ? WHERE platformtype='os'"
 )->execute(array($arr['first_scan_date1'][$i],$arr['next_scan_date1'][$i],$arr['scan_freq1'][$i]));
}
于 2012-12-08T17:59:25.663 に答える
1

配列をループして、次のような単一のクエリに挿入する文字列を準備します。

$sql = "INSERT INTO table (first_scan_date,next_scan_date,scan_frequency)
VALUES ('0000-00-00','0000-00-00',1),('0000-00-00','0000-00-00',1),('0000-00-00','0000-00-00',1)
ON DUPLICATE KEY UPDATE first_scan_date=VALUES(first_scan_date),next_scan_date=VALUES(next_scan_date),scan_frequency=VALUES(scan_frequency);";

あなたはこのようなことをすることができます:

$freq = $arr['scan_freq1'];
$date1 = $arr['first_scan_date1'];
$date2 = $arr['next_scan_date1'];
foreach ($date1 as $key => $value){
    $row[] = "('".$value."','".$date2[$key]."',".$freq[$key].")";
}
$list = implode(',', $row);
$sql = "INSERT INTO table (first_scan_date,next_scan_date,scan_frequency)
VALUES ".$list."
ON DUPLICATE KEY UPDATE first_scan_date=VALUES(first_scan_date),next_scan_date=VALUES(next_scan_date),scan_frequency=VALUES(scan_frequency);";
于 2012-12-08T18:03:42.133 に答える
0

これは遅いかもしれませんが、現在または将来の誰かを助けるかもしれません私はここがこれを達成するための最短の方法であると信じています

public function update($table,$values,$where_clause)
{
  foreach ($values as $key => $val)
  {
    $valstr[] = $key." = '$val'";
  }

 $update_query = 'UPDATE '.$table.' SET '.implode(', ', $valstr)
 ." WHERE ".$where_clause; 
  return $update_query;
}

これをcodeignitersコアファイルの1つで見つけた場合、すべての値をループして配列に格納し、配列を文字列に変換してクエリに追加し、where句が最後に来るようにします。これが誰かに役立つことを願っています

于 2019-03-09T00:26:53.140 に答える