在我的mysql数据库中,我有几行,每行都包含一个项目id。我想要做的是更新每个"placidRate“列,以获取下面这个非常大的URL的XML文档中包含的内容。例如,对于typeID 1230,它应该在我的数据库中找到1230的速率,并将其与$type->sell->min的速率进行匹配。这就是最终目标。现在我所要做的就是把旧的速率(db)和新的速率(xml)放在一起。
while($row = mysql_fetch_assoc($result)){
$oldTypeID = $row['typeID'];
$urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399®ionlimit=10000048';
$xmlPlacid = simplexml_load_file($urlPlacid);
foreach($xmlPlacid->marketstat->type as $type){
$newRate = $type->sell->min;
if($type[id] = $oldTypeID){
echo "old placid rate: ".$row['placidRate']." || new placid rate: ".$newRate;
}
else{}这段代码的问题是,它返回
旧稳定率: 14.5 ||新稳定率:12.00旧稳定率: 14.5 ||新稳定率:25.00旧稳定率: 14.5 ||新稳定率:17.00旧稳定率: 14.5 ||新稳定率:25.21旧稳定率: 14.5 ||新稳定率:22.01旧稳定率: 14.5 ||新稳定率:30.00旧稳定率: 14.5 ||新稳定率:0.00旧稳定率: 14.5 ||新稳定率:0.00老稳定率: 14.5 ||新稳定率:0.00旧稳定率:14.5||新稳定率:0.00旧稳定率:14.5||新稳定率:0.00旧稳定率:14.5||新稳定率:0.00旧稳定率:14.5|新平等率:55.00旧平稳率: 14.5 ||新平稳率:80.00旧平稳率: 14.5 ||新平稳率:85.00旧平稳率: 14.5 ||新平稳率:94.00旧平稳率: 14.5 ||新平等率:90.00旧平稳率: 14.5 ||新平等率:120.00旧平稳率: 14.5 ||新平等率:0.00旧平静率: 14.5 ||新平静率:290.00旧平静率: 14.5 ||新平静率:0.00老平静率占有率: 14.5 ||新占有率:0.00旧占有率: 14.5 ||新占有率:1087.06旧占有率: 14.5 ||新占有率:0.00旧占有率: 14.5 ||新占有率: 14.5比率:0.00旧平稳率: 14.5 ||新平稳率:0.00旧平稳率:14.5 ||新平稳率:0.00旧平稳率: 14.5 ||新平稳率:0.00old placid rate: 14.5 || new placid rate: 0.00old placid rate: 14.5 || new placid rate: 4.00 new placid rate: 14.5 || new placid rate: 10.00 new placid rate: 14.5 || new placid rate: 40.00 new placid rate: 14.5 || new placid rate: 143.00 new placid rate: 14.5 || new placid rate: 4000 new placid rate: 14.5 || new placid rate: 143.00 new placid rate: 14。5 ||新平稳率:819.00旧平稳率: 14.5 ||新平稳率:2599.00旧平稳率: 14.5 ||新平稳率:770.00旧平稳率: 14.5 ||新平稳率: 0.00
我也不完全确定为什么..。
离更新sql表更近了一步。再次编辑
$market = new eveCentral();
while($row = mysql_fetch_assoc($result2)){
$oldTypeID = $row['typeID'];
$oldRate = $row['placidRate'];
$newPlacidRate = $market->placidMin($oldTypeID);
$newForgeRate = $market->forgeMin($oldTypeID);
$newUniverseRate = $market->universeMin($oldTypeID);
$updateQuery = "UPDATE itemRates SET placidRate = $newPlacidRate, forgeRate = $newForgeRate, universeRate = $newUniverseRate WHERE typeID = $oldTypeID";发布于 2013-01-03 01:21:38
除了if比较中运算符错误的问题(正如@GBD所概述的),这里还有几个问题:
从eve-central.com获取每个数据库结果行的。但是XML不会改变。将其移动到数据库while查询的上方。
从上面看:
$marketstat = new EveCentralMarketstat();
while ($row = mysql_fetch_assoc($result)) {
$oldTypeID = $row['typeID'];
$oldRate = $row['placidRate'];
$newRate = $marketstat->getSellMinByType($oldTypeID);
if (FALSE !== $newRate) {
echo "old placid rate: " . $oldRate . " || new placid rate: " . $newRate;
}
}EveCentralMarketstat类的定义:
添加更多数据访问所需的函数,构造函数也可以根据您需要的信息进行改进,只需快速概述如何改进即可。
/**
* Wrapper Class for Even Central API Market Statistics
*/
class EveCentralMarketstat
{
/**
* @var SimpleXMLElement
*/
private $xml;
public function __construct() {
$urlPlacid = 'http://api.eve-central.com/api/marketstat?typeid=1230&typeid=17470&typeid=17471&typeid=1228&typeid=17463&typeid=17464&typeid=1224&typeid=17459&typeid=18&typeid=17455&typeid=17456&typeid=1227&typeid=17867&typeid=17868&typeid=20&typeid=17452&typeid=17453&typeid=1226&typeid=17448&typeid=17449&typeid=1231&typeid=17444&typeid=17445&typeid=21&typeid=17440&typeid=17441&typeid=1229&typeid=17865&typeid=17866&typeid=1232&typeid=17436&typeid=17437&typeid=19&typeid=17466&typeid=17467&typeid=1225&typeid=17432&typeid=17433&typeid=1223&typeid=17428&typeid=17429&typeid=22&typeid=17425&typeid=17426&typeid=11396&typeid=17869&typeid=17870&typeid=34&typeid=35&typeid=36&typeid=37&typeid=38&typeid=40&typeid=39&typeid=11399®ionlimit=10000048';
$this->xml = simplexml_load_file($urlPlacid);
}
/**
* @param $typeID
* @return bool|string String value if $typeID is found, FALSE on error
*/
public function getSellMinByType($typeID) {
$result = $this->xml->xpath("/*/marketstat/type[@id = '$typeID']/sell/min");
if (!$result) {
return FALSE;
}
return (string)$result[0];
}
}发布于 2013-01-02 23:55:47
如果要按ID查找节点,只需使用xpath
$node = $xmlPlacid->xpath("//*[@id='foo']");
发布于 2013-01-02 23:57:39
在IF中缺少等于运算符的==
if($type['id'] == $oldTypeID){
...
}https://stackoverflow.com/questions/14124962
复制相似问题