解析/转换XML库存数据并上传到mySQL数据库

时间:2016-02-29 19:58:03

标签: php mysql xml

这可能不是最好的方法,所以我愿意接受意见,但我想通过他们的API从我的经纪人那里提取数据并将其加载到mySQL数据库中。我有开发的PHP代码来连接和检索XML数据。非常感谢任何编码协助或指导!

我想要它做什么: 1.能够将XML数据捕获为变量 2.使用相同的字段名称(已创建数据库和表)将XML数据解析并上传到mySQL表。

背景: 1.我是PHP的新手,但很了解html并快速学习。

  1. 我运行一个从我的经纪人那里检索数据的php文件。我希望能够: (a)将XML字段捕获为变量(以便我可以根据各个值创建表)和(b)将XML数据上载到表中
  2. 我已经在论坛上阅读了很多帖子,而且我正在努力为我提供一些适合我的工作。

    示例(显然它要长得多)从php数据请求返回的xml数据(tkdataex.php):

    <?xml version="1.0" encoding="UTF-8"?><response id="e4985128-a402-4334-9e25-b86d930e9703"><elapsedtime>0</elapsedtime>
    <quotes>
      <quote>
        <issue_desc>CALL MAR-02 $1550.00</issue_desc>
        <last>0.0</last>
        <volume>0</volume>
      </quote>
      <quote>
        <issue_desc>CALL MAR-02 $1575.00</issue_desc>
        <last>0.0</last>
        <volume>0</volume>
      </quote>
      <quote>
        <issue_desc>CALL MAR-02 $1600.00</issue_desc>
        <last>0.0</last>
        <volume>0</volume>
      </quote>
    </quotes><error>Success</error></response>
    
    到目前为止我的代码(filloptionstable.php)返回服务器错误:

    <?php
    
    $url = "tkdataex.php";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);    //get url contents
    
    $data = curl_exec ($ch);    //execute curl request
    curl_close($ch);
    
    $xml = simplexml_load_string($data);
    
    require_once 'dbconnect.php';
    $database = 'SPX';
    $table = 'SPXchain';
    
    
    foreach ($xml -> quote as $row){
        $strikeprice = $row -> strikeprice;
        $last = $row -> last;
        $strikeprice = $row -> volume;
        INSERT INTO chain (strikeprice, last, volume) VALUES ($stripeprice,$last,$volume);
    }
    
    ?>
    

    我知道这适用于手动指定值的一个条目,但我无法弄清楚如何获取XML值以使其动态化(filloptionstablebasic.php):

    <?php
    
    $url = "testfull.php";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);    //get url contents
    
    $data = curl_exec ($ch);    //execute curl request
    curl_close($ch);
    
    $xml = simplexml_load_string($data);
    
    require_once 'dbconnect.php';
    $database = 'SPX';
    $table = 'SPXchain';
    
    $xdate = 20160302;
    $strikeprice = 1900 ;
    $delta = 0.082;
    $interest = 100;
    $volume = 120;
    $put_call = '"call"';
    $bid = 4.56;
    $ask = 4.90;
    $last = 4.72;
    $daychange = -0.24;
    $pull_time = CURRENT_TIMESTAMP;
    
    $sql = 'INSERT INTO SPXchain '.
          '(
            xdate,
            strikeprice, 
            delta,
            interest,
            volume,
            put_call,
            bid,
            ask,
            last,
            daychange,
            pull_time) '.
          'VALUES ( ' .
            $xdate . ', ' .
            $strikeprice . ', ' . 
            $delta . ', ' . 
            $interest . ', ' . 
            $volume . ', ' . 
            $put_call . ', ' .
            $bid . ', ' . 
            $ask . ', ' . 
            $last . ', ' .
            $daychange . ', ' . 
            $pull_time . ')';
    
    mysql_select_db('SPX');
       $retval = mysql_query( $sql, $conn );
    
       if(! $retval ) {
          die('Could not enter data: ' . mysql_error());
       }
    
    echo "Entered data successfully into " . $table;
    

1 个答案:

答案 0 :(得分:0)

首先与simplexml_load_string()合作可能令人困惑。 该函数返回一个对象,其中所有属性也是对象。

为了能够在变量中存储属性值,您需要将属性转换为正确的类型。

将代码更改为(假设这些值为整数):

foreach ($xml->quote as $row){
    $strikeprice = (int) $row->strikeprice;
    $last = (int) $row->last;
    $strikeprice = (int) $row->volume;
    ...
}

对整数使用(int),为字符串使用(string)

PS。 ->周围没有空格。这只会让你更难阅读。