0

FacebookOpenGraphを使用して配列からデータを取得しようとしています。foreachステートメントを使用して配列を取得していますが、6つの異なるINSERTステートメントを作成しています。配列の各値を1つのMYSQL行に送信できるようにしたいと思います。

$ insert2は6つの異なる行を挿入し、$ insert 3は1つの行を挿入しますが、$urlformだけであることに注意してください。

どんな助けでも大歓迎です。

コードは次のとおりです。

require_once('OpenGraph.php');
$urlget2 = "http://www.example.com/article/1/title";
$graph = OpenGraph::fetch($urlget2);
foreach ($graph as $key => $value) {
    $array = array($key => $value);
print_r($array);
    $key = type;
    $key1 = title;
    $key2 = image;
    $key3 = description;
    $key4 = url;
    $subtype = $array[$key];
    $subtitle = $array[$key1];
    $subimage = $array[$key2];
    $subdesc = $array[$key3];
    $urlform = $array[$key4];
    $useridme = "5";
    $insert2 = "INSERT INTO share VALUES('','$urlform','$subtype','$subtitle','$subimage','$subdesc','$subtime','$datesubmit','$subevent','$useridme','$facebookidme','$grpurl')";
    echo "<hr />";
    echo $insert2;
}
echo "<hr />";
$insert3 = "INSERT INTO share VALUES('','$urlform1','$subtype','$subtitle','$subimage','$subdesc','$subtime','$datesubmit','$subevent','$useridme','$facebookidme','$grpurl')";
    echo "<hr />";
    echo $insert3;
4

3 に答える 3

2

コードをこれに置き換えます。こちらのリンクもお読みください

require_once('OpenGraph.php');
$urlget2 = "http://www.example.com/article/1/title";
$graph = OpenGraph::fetch($urlget2);
$insertvalues = '';    
foreach ($graph as $key => $value) {
  $array = array($key => $value);
  print_r($array);
  $key = type;
  $key1 = title;
  $key2 = image;
  $key3 = description;
  $key4 = url;
  $subtype = $array[$key];
  $subtitle = $array[$key1];
  $subimage = $array[$key2];
  $subdesc = $array[$key3];
  $urlform = $array[$key4];
  $useridme = "5";

//get all insert values
  $insertvalues .= ", ('','".$urlform."','".$subtype."','".$subtitle."','".$subimage."' ,'".$subdesc."','".$subtime."','".$datesubmit."','".$subevent."','".$useridme."','".$facebookidme."','".$grpurl."')";  

  echo "<hr />";
  echo $insertvalues;
}
echo "<hr />";
$insertvalues= substr($insertvalues,1); //just takes off the leading comma

$insert3 = "INSERT INTO share VALUES ".$insertvalues;
echo "<hr />";
echo $insert3;
mysql_query($insert3);
于 2012-08-16T05:46:15.687 に答える
0

このコードを試すことをお勧めします:

require_once('OpenGraph.php');
$urlget2 = "http://www.example.com/article/1/title";
$graph = OpenGraph::fetch($urlget2);
$insert2 = array();
foreach ($graph as $key => $value) {
    $array = array($key => $value);
    print_r($array);
    $key = type;
    $key1 = title;
    $key2 = image;
    $key3 = description;
    $key4 = url;
    $subtype = $array[$key];
    $subtitle = $array[$key1];
    $subimage = $array[$key2];
    $subdesc = $array[$key3];
    $urlform = $array[$key4];
    $useridme = "5";
    $insert2[] = "('','$urlform','$subtype','$subtitle','$subimage','$subdesc','$subtime','$datesubmit','$subevent','$useridme','$facebookidme','$grpurl')";
    echo "<hr />";
}
$query = "INSERT INTO share VALUES".implode(", ", $insert2);
echo "$query<br>";
mysql_query($query);

echo "<hr />";
$insert3 = "INSERT INTO share VALUES('','$urlform1','$subtype','$subtitle','$subimage','$subdesc','$subtime','$datesubmit','$subevent','$useridme','$facebookidme','$grpurl')";
echo "<hr />";
echo $insert3;

$insert2 は、挿入するすべての値を格納する配列になりました。foreachループの後、すべての値が連結されて、テーブルにすべての値を挿入する単一のINSERT クエリが作成されます。1 つの INSERT クエリを使用してすべての値を挿入すると、多数の個別の挿入を使用するよりもはるかに高速になります。スクリプトが同時に多数 (数千以上) のレコードを挿入する場合、スクリプトの実行速度が向上したことに気付くでしょう。

ドキュメント:挿入

于 2012-08-16T05:58:35.897 に答える
0

foreachループは何度も何度も実行されています$insert2。私なら、変えるね:

 $insert2 = "INSERT INTO share VALUES('','$urlform','$subtype',
             '$subtitle','$subimage','$subdesc','$subtime','$datesubmit',
             '$subevent','$useridme','$facebookidme','$grpurl')";

に:

$inserts[] = "INSERT INTO share VALUES('','$urlform','$subtype', 
              '$subtitle','$subimage','$subdesc','$subtime','$datesubmit',
              '$subevent','$useridme','$facebookidme','$grpurl')";

foreachループの後に の配列が得られるようにします$inserts。次のように使用できます。

foreach( $inserts as $insert){
    //use $insert to insert the record into the DB
}

Jocelyn の場合:
配列に対して連結された文字列を使用する利点はないと思いますが、次のように
変更できます$insert2 = ...

$inserts .= "INSERT INTO share VALUES('','$urlform','$subtype', 
                  '$subtitle','$subimage','$subdesc','$subtime','$datesubmit',
                  '$subevent','$useridme','$facebookidme','$grpurl');";
于 2012-08-16T05:40:35.767 に答える