Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用curl将xml响应转换为数组,然后使用php存储在数据库中_Php_Curl - Fatal编程技术网

如何使用curl将xml响应转换为数组,然后使用php存储在数据库中

如何使用curl将xml响应转换为数组,然后使用php存储在数据库中,php,curl,Php,Curl,我正在服务器上调用PHP cURL方法,响应是XML类型。cURL将输出保存在标量类型变量中(删除标记后)。有没有办法将其存储在数据库中以便易于解析? <Response status="OK" responseTime="10"> <Results> <wirelineServices> <blockFIPS>360775908001027</blockFIPS> <frn>0007556251</frn> &

我正在服务器上调用PHP cURL方法,响应是XML类型。cURL将输出保存在标量类型变量中(删除标记后)。有没有办法将其存储在数据库中以便易于解析?

<Response status="OK" responseTime="10">
<Results>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0007556251</frn>
<providerName>Time Warner Cable LLC</providerName>
<doingBusinessAs>Time Warner Cable</doingBusinessAs>
<holdingCompanyNumber>131352</holdingCompanyNumber>
<holdingCompanyName>Time Warner Cable Inc.</holdingCompanyName>
<providerURL>www.timewarnercable.com</providerURL>
<technologies>
<technologyCode>40</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>9</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>5</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>3.00</technologyQuality>
<providerQuality>3.00</providerQuality>
<downloadQuality>1.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>3.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0003469442</frn>
<providerName>Verizon New York Inc.</providerName>
<doingBusinessAs>Verizon New York</doingBusinessAs>
<holdingCompanyNumber>131425</holdingCompanyNumber>
<holdingCompanyName>Verizon Communications Inc.</holdingCompanyName>
<providerURL>www.connecttoverizon.com</providerURL>
<technologies>
<technologyCode>10</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>5</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>3</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>2.00</technologyQuality>
<providerQuality>2.00</providerQuality>
<downloadQuality>0.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>2.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<broadbandSource>
<stateFips>36</stateFips>
<organization>The New York State Office of Cyber Security</organization>
<organizationURL>http://www.cscic.state.ny.us/broadband/</organizationURL>
</broadbandSource>
</Results>
</Response>

你可以这样做。遍历所有数组以获取wirelineServices的所有值。这将导致最多2条记录。在字符串中插入所有值,并将字符串放入数组中

为我们的数据库进行查询。我估计每个值都有一列。并用字符串插入数组,以便将所有记录都放入数据库

当然,您需要更改表名,并且必须使用连接数据

<?php
$xmlstr = '<Response status="OK" responseTime="10">
<Results>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0007556251</frn>
<providerName>Time Warner Cable LLC</providerName>
<doingBusinessAs>Time Warner Cable</doingBusinessAs>
<holdingCompanyNumber>131352</holdingCompanyNumber>
<holdingCompanyName>Time Warner Cable Inc.</holdingCompanyName>
<providerURL>www.timewarnercable.com</providerURL>
<technologies>
<technologyCode>40</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>9</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>5</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>3.00</technologyQuality>
<providerQuality>3.00</providerQuality>
<downloadQuality>1.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>3.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0003469442</frn>
<providerName>Verizon New York Inc.</providerName>
<doingBusinessAs>Verizon New York</doingBusinessAs>
<holdingCompanyNumber>131425</holdingCompanyNumber>
<holdingCompanyName>Verizon Communications Inc.</holdingCompanyName>
<providerURL>www.connecttoverizon.com</providerURL>
<technologies>
<technologyCode>10</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>5</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>3</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>2.00</technologyQuality>
<providerQuality>2.00</providerQuality>
<downloadQuality>0.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>2.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<broadbandSource>
<stateFips>36</stateFips>
<organization>The New York State Office of Cyber Security</organization>
<organizationURL>http://www.cscic.state.ny.us/broadband/</organizationURL>
</broadbandSource>
</Results>
</Response>';




$xml = simplexml_load_string($xmlstr);
$json = json_encode($xml);
$arrays = json_decode($json,true);


//this is what your array looks like
echo "<pre>";
print_r($arrays);


$counter = 0;

// get all values inside wirelineServices
foreach($arrays['Results']['wirelineServices'] AS $nbr => $arr){

      //start of the input string
      $insert[$counter] = "(";

      //iterate through $arr
      foreach($arr AS $key => $value){

            //if value is array iterate through $value
            if(is_array($value)){
                  foreach($value AS $key2 => $value2){
                        $insert[$counter] .= "'" . $value2 . "', ";
                  } 
            } else {                  
                  $insert[$counter] .= "'" . $value . "', ";            
            }
      }

      //remove last ', ' from string.
      $insert[$counter] = substr($insert[$counter], 0, -2) . ")";

      //start new string
      $counter++;

$sql = "INSERT INTO `table` (`blockFIPS`, `frn`,`providerName`,`doingBusinessAs`,`holdingCompanyNumber`,`holdingCompanyName`,`providerURL`,`technologyCode`,`typicalDownloadSpeed`,`typicalUploadSpeed`,`maximumAdvertisedDownloadSpeed`,
      `maximumAdvertisedUploadSpeed`,`overallQuality`,`speedQuality`,`technologyQuality`,`providerQuality`,`downloadQuality`,`uploadQuality`,`maximumProviderScore`,`maximumTechnologyScore`,`maximumSpeedScore`,`maximumDownloadScore`,
      `maximumUploadScore`) VALUES " . implode(",",$insert); . "";

if (mysqli_query($connect, $sql)) {
      echo 'Records created successfull';
} else {
      echo $sql . '"<br>"' . mysqli_error($connect);
}

?>
$arr){
//输入字符串的开头
$insert[$counter]=“(”;
//遍历$arr
foreach($arr作为$key=>$value){
//如果值为数组,则遍历$value
if(是_数组($value)){
foreach($key2=>$value2的值){
$insert[$counter]。=“'$value2.”,“;
} 
}否则{
$insert[$counter]。=“'$value.”,“;
}
}
//从字符串中删除最后一个“,”。
$insert[$counter]=substr($insert[$counter],0,-2)。”;
//开始新字符串
$counter++;
$sql=“INSERT INTO`table`(`blockFIPS`、`frn`、`providerName`、`doingBusinessAs`、`holdingCompanyNumber`、`holdingCompanyName`、`providerURL`、`technologyCode`、`typicalDownloadSpeed`、`typicalUploadSpeed`、`maximumAdvertisedDownloadSpeed`、`,
`maximumAdvertisedUploadSpeed`、`Overall Quality`、`speedQuality`、`technologyQuality`、`providerQuality`、`downloadQuality`、`uploadQuality`、`maximumProviderScore`、`maximumTechnologyScore`、`maximumSpeedScore`、`maximumDownloadScore`、,
`maximumUploadScore`)值“.内爆(“,”,$insert);.”;
if(mysqli_查询($connect,$sql)){
echo“已成功创建记录”;
}否则{
echo$sql.“
”。mysqli_错误($connect); } ?>
$xml=simplexml\u load\u string($response)
应该解析字符串XML并生成一个好的解析对象,然后您可以访问该对象的属性。为什么您需要额外的步骤来运行json_编码/解码?您的方法是否符合您的要求?问题到底是什么?我必须获取XML响应值并将其存储在数据库中。它工作正常,但我必须创建一个为单独的值使用单独的变量是可能的吗?。感谢您的帮助。当然,这是可能的,上面的代码正在用松散的值构建字符串。您需要哪个值??
<?php
$xmlstr = '<Response status="OK" responseTime="10">
<Results>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0007556251</frn>
<providerName>Time Warner Cable LLC</providerName>
<doingBusinessAs>Time Warner Cable</doingBusinessAs>
<holdingCompanyNumber>131352</holdingCompanyNumber>
<holdingCompanyName>Time Warner Cable Inc.</holdingCompanyName>
<providerURL>www.timewarnercable.com</providerURL>
<technologies>
<technologyCode>40</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>9</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>5</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>3.00</technologyQuality>
<providerQuality>3.00</providerQuality>
<downloadQuality>1.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>3.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0003469442</frn>
<providerName>Verizon New York Inc.</providerName>
<doingBusinessAs>Verizon New York</doingBusinessAs>
<holdingCompanyNumber>131425</holdingCompanyNumber>
<holdingCompanyName>Verizon Communications Inc.</holdingCompanyName>
<providerURL>www.connecttoverizon.com</providerURL>
<technologies>
<technologyCode>10</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>5</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>3</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>2.00</technologyQuality>
<providerQuality>2.00</providerQuality>
<downloadQuality>0.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>2.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<broadbandSource>
<stateFips>36</stateFips>
<organization>The New York State Office of Cyber Security</organization>
<organizationURL>http://www.cscic.state.ny.us/broadband/</organizationURL>
</broadbandSource>
</Results>
</Response>';




$xml = simplexml_load_string($xmlstr);
$json = json_encode($xml);
$arrays = json_decode($json,true);


//this is what your array looks like
echo "<pre>";
print_r($arrays);


$counter = 0;

// get all values inside wirelineServices
foreach($arrays['Results']['wirelineServices'] AS $nbr => $arr){

      //start of the input string
      $insert[$counter] = "(";

      //iterate through $arr
      foreach($arr AS $key => $value){

            //if value is array iterate through $value
            if(is_array($value)){
                  foreach($value AS $key2 => $value2){
                        $insert[$counter] .= "'" . $value2 . "', ";
                  } 
            } else {                  
                  $insert[$counter] .= "'" . $value . "', ";            
            }
      }

      //remove last ', ' from string.
      $insert[$counter] = substr($insert[$counter], 0, -2) . ")";

      //start new string
      $counter++;

$sql = "INSERT INTO `table` (`blockFIPS`, `frn`,`providerName`,`doingBusinessAs`,`holdingCompanyNumber`,`holdingCompanyName`,`providerURL`,`technologyCode`,`typicalDownloadSpeed`,`typicalUploadSpeed`,`maximumAdvertisedDownloadSpeed`,
      `maximumAdvertisedUploadSpeed`,`overallQuality`,`speedQuality`,`technologyQuality`,`providerQuality`,`downloadQuality`,`uploadQuality`,`maximumProviderScore`,`maximumTechnologyScore`,`maximumSpeedScore`,`maximumDownloadScore`,
      `maximumUploadScore`) VALUES " . implode(",",$insert); . "";

if (mysqli_query($connect, $sql)) {
      echo 'Records created successfull';
} else {
      echo $sql . '"<br>"' . mysqli_error($connect);
}

?>