2017-03-21 17 views
-1

現在、print_r()によって出力されるとき、次のような配列があります。 MySQLのテーブルは以下のようになります配列を使用してMysqlテーブルのデータを更新します

$arr = Array 
(
    [14] => Array 
     (
      [url] => AllConsuming.net 
      [da] => 48 
      [pa] => 54.4 
      [moz_rank] => 5.1 
      [linksln] => 2123 
      [equity] => 1318 
      [alexa_rank] => 1725106 
      [a_links] => 197 
      [a_cnt] => GB 
      [a_cnt_rank] => 123484 
      [sem_rush_domain] => notfound 
      [sr_rank] => 0 
      [sr_kwords] => 0 
      [sr_traffic] => 0 
      [sr_costs] => 0 
      [sr_ulinks] => 514 
      [sr_hlinks] => 4154 
      [sr_dlinks] => 12732 
      [cf] => 34 
      [tf] => 21 
      [ebl] => 108777 
      [ref_domains] => 1113 
     ) 
[15] => Array 
    (
     [url] => TravelIntelligence.net 
     [da] => 31.7 
     [pa] => 33.3 
     [moz_rank] => 2.9 
     [linksln] => 1 
     [equity] => 1 
     [alexa_rank] => 4265239 
     [a_links] => 98 
     [a_cnt] => N/A 
     [a_cnt_rank] => N/A 
     [sem_rush_domain] => notfound 
     [sr_rank] => 0 
     [sr_kwords] => 0 
     [sr_traffic] => 0 
     [sr_costs] => 0 
     [sr_ulinks] => 1 
     [sr_hlinks] => 3 
     [sr_dlinks] => 3542 
     [cf] => 22 
     [tf] => 19 
     [ebl] => 6368 
     [ref_domains] => 531 
    ) 

Mysql table

私は、それぞれの分野に属する各要素の値をMySQLのテーブルにこのデータを更新したいです。配列のキー、すなわち14,15はMySQLテーブルの主キーです。

私はいくつかの天才が私にこの問題を解決するのを助けることを願っています。

ありがとうございます。あなたはプリペアドステートメントを構築するためにforeachを使用して$arrを繰り返すことができ

+0

あなたは何をすべきかを試してみましたところ? – hassan

+0

はい、これを行うことができます。 foreachやその他の反復関数を使用して、このデータからmysqlクエリを構築することができます。 – Jerodev

+0

こんにちは@ハッサン、どうしたのか分かりませんでした。私は立ち往生している。あなたは何か考えているなら、私に教えてください。ありがとうございます.. – Angel

答えて

-1

ための大きな絵です:配列のキーのための

<?php 
$arr = array(
     "14" => array(
       "url" => "AllConsuming.net", 
       "da" => 48, 
       "pa" => 54.4, 
       "moz_rank" => 5.1, 
       "linksln" => 2123, 
       "equity" => 1318, 
       "alexa_rank" => 1725106, 
       "a_links" => 197, 
       "a_cnt" => "GB", 
       "a_cnt_rank" => 123484, 
       "sem_rush_domain" => "notfound", 
       "sr_rank" => 0, 
       "sr_kwords" => 0, 
       "sr_traffic" => 0, 
       "sr_costs" => 0, 
       "sr_ulinks" => 514, 
       "sr_hlinks" => 4154, 
       "sr_dlinks" => 12732, 
       "cf" => 34, 
       "tf" => 21, 
       "ebl" => 108777, 
       "ref_domains" => 1113, 
      ), 
     "15" => array(
      "url" => "TravelIntelligence.net", 
      "da" => 31.7, 
      "pa" => 33.3, 
      "moz_rank" => 2.9, 
      "linksln" => 1, 
      "equity" => 1, 
      "alexa_rank" => 4265239, 
      "a_links" => 98, 
      "a_cnt" => "N/A", 
      "a_cnt_rank" => "N/A", 
      "sem_rush_domain" => "notfound", 
      "sr_rank" => 0, 
      "sr_kwords" => 0, 
      "sr_traffic" => 0, 
      "sr_costs" => 0, 
      "sr_ulinks" => 1, 
      "sr_hlinks" => 3, 
      "sr_dlinks" => 3542, 
      "cf" => 22, 
      "tf" => 19, 
      "ebl" => 6368, 
      "ref_domains" => 531 
     ) 
    ); 

$yourTableColumnArray = array("url", "cost", "categroy_1", "categroy_2", "categroy_3", "language", "f_n", "publishers", "da", "tf", "sr_traffic", "pa", "moz_rank", "linksln", "equity", "alexa_rank", "a_links", "a_cnt", "a_cnt_rank"); 

foreach($arr as $key => $value){ 
    $id = $key; 
    $columnAndValue = array(); 
    foreach($value as $k => $val){ 
     if(in_array($val, $yourTableColumnArray)){ 
      $columnAndValue[$k] = $val; 
     } 
    } 
    if(!empty($columnAndValue)){ 
     //your query like below: 
     $query = "UPDATE yourTableName SET"; 
     foreach($columnAndValue as $ky => $vl){ 
      $query .= " ".$ky."=".$vl; 
      end($columnAndValue); 
      if(key($columnAndValue) != $ky){ 
       $query .= ","; 
      } 

     } 
     $query .= " where out_id = $id"; 
     echo $query."<br>"; //just to know, the actual query formed for the current array(for 14 or 15) 

     // now code here to execute your query with $query variable 

    } 
    $columnAndValue = array(); 
} 

出力

= 14クエリは次のようになります。

UPDATE yourTableName SET sr_rank = 0、sr_kwords = 0、sr_traffic = 0、sr_costs = 0ここでout_id = 14

配列のキーのための210

は= 15、クエリは次のようになります。

UPDATE yourTableName SETはsr_rank = 0、sr_kwords = 0、sr_traffic = 0、sr_costs = 0 out_id = 15

+0

ありがとうございました@Bunker Boy – Angel

+0

あなたのお問い合わせはシングルレコードの更新になります。複数のレコードを更新する方法を教えてください。例えば、配列には14と15の2つのレコードがあります。そのため、一度にデータベース内の両方のレコードを更新する必要があります。私を助けてください。ありがとうございます... – Angel

+0

あなたのコードはSQLインジェクション攻撃の影響を受けやすいです。 –

0

、次のように:あなたはとにかくJSONなどのデータを投稿する場合

/** @var \PDO $dbHandle */ 

foreach ($arr as $id => $row) { 

    $row['out_id'] = $id; 

    $setInstructions = array_map(function ($key) { 
     return "'$key' = :$key"; 
    }, array_keys($row)); 

    $columnNamesWithSemicolon = array_map(function ($key) { 
     return ":$key"; 
    }, array_keys($row)); 

    $result = $dbHandle->prepare("UPDATE your_table SET " . implode(',', $setInstructions) . " WHERE out_id = :out_id"); 

    $result->execute(array_combine($columnNamesWithSemicolon, array_values($row))); 
} 
+0

ありがとう@コンスタンチンGALBENU – Angel

+0

@Pooja ditは動作しますか? –

+0

こんにちは@ Constantin GALBENU、質問を作成するフローを教えてください。 – Angel

0
foreach($arr as $key=>$val) 
{ 
    $paramquery = array(); 
    $paramquery['primarykey'] = $key; 
    $paramquery['goes on your column name'] = $val_every_row['every key matched column']; 
    ------ goes on your column and fill it with your column data 


    INSERT OR UPDATE HERE 
    $this->model->whateverfunction($paramquery); 

} 

そのかなり簡単、そのつもりが容易になります。しかし、これはあなたがコンセプトの下に使用することができます@Poojaそれ

+0

@Evinn – Angel

関連する問題