2012-08-16 117 views
0

我想从使用Facebook Open Graph的数组中取数据。我正在使用foreach语句获取数组,但是这使得6个不同的INSERT语句。我希望数组中的每个值能够被提交到一个MYSQL行中。将变量数组数据插入MYSQL

请注意,$ insert2插入6条不同的行,$ insert 3插入一行,但只是$ 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; 
+0

您的'foreach'在哪里完成?一些线路丢失。 – Jocelyn 2012-08-16 05:25:41

+0

Foreach在echo $ insert2之后完成。 – stevieD 2012-08-16 05:37:04

+0

对不起。我没有仔细查看:-(此外,缩进有点误导 – Jocelyn 2012-08-16 05:37:55

回答

2

用这个替换代码。此外阅读本link

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); 
+0

尝试使用这个,但它仍然提交了6行到数据库。有没有办法在foreach之后回显数组中的各个值? – stevieD 2012-08-16 20:28:13

+0

现在在此代码之后使用更新和删除不需要的行结束使用解决方法。 – stevieD 2012-08-17 05:11:34

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 
} 

对于乔斯林:
我没有看到使用一个连接字符串,一个数组的优势,但这里有云:
你可以改变$insert2 = ...
至:

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

OP问到的是:“我希望数组中的每个值都能够被提交到一个MYSQL行。”使用你的代码将获得许多单独的查询而不是单个查询 – Jocelyn 2012-08-16 05:43:23

+0

@Jocelyn np,请参阅更新后的答案 – alfasin 2012-08-16 05:47:08

+0

区别在于,单个INSERT比许多单独的INSERT更快,如果要在脚本中插入10条记录,则无关紧要。但是,如果你想快速插入数千条记录,限制INSERT查询的数量会加快执行速度。 – Jocelyn 2012-08-16 05:50:29

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查询。使用一个INSERT查询插入所有值比使用多个单独的插入要快得多。如果您的脚本同时插入许多记录(数千或更多),您可能会注意到它现在执行得更快。

文档:INSERT

+0

尝试了这一点,它没有插入$查询到数据库中。 $查询的回声是:INSERT INTO共享VALUESINSERT INTO共享VALUES('','','','RG3和红皮在季前赛开局中击败账单 - Yoozpaper |免费在线文章','','','1345156569' ,“2012-08-16”,“”,“5”,“47001227”,“人参皂甙Rg3和 - 红皮败国债功能于季前赛揭幕战--- yoozpaper- | - 免费 - 在线文章”) ,INSERT INTO share VALUES('','','','','','','1345156569','2012-08-16','','5','47001227','') ,INSERT INTO share VALUES('','','article','','','','1345156569','2012-08-16','','5','47001227','' ) – stevieD 2012-08-16 22:39:09