这可能不是最好的方法,所以我愿意接受意见,但我想通过他们的API从我的经纪人那里提取数据并将其加载到mySQL数据库中。我有开发的PHP代码来连接和检索XML数据。非常感谢任何编码协助或指导!
我想要它做什么: 1.能够将XML数据捕获为变量 2.使用相同的字段名称(已创建数据库和表)将XML数据解析并上传到mySQL表。
背景: 1.我是PHP的新手,但很了解html并快速学习。
我已经在论坛上阅读了很多帖子,而且我正在努力为我提供一些适合我的工作。
示例(显然它要长得多)从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;
答案 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。 ->
周围没有空格。这只会让你更难阅读。