使用正确的货币汇率更新表格

时间:2013-01-02 19:30:32

标签: php mysql sql

我正在尝试将1英镑换成其他货币,目前我正在以1欧元兑换其他货币。例如1欧元= 0.81400英镑,我可以通过除以每股给出的汇率1.228501228501229来反转这个并获得1英镑到欧元。

我想要所有货币,目前我使用PHP脚本来获取汇率。如何更改我的Stock_currency表并将GBP除以所有货币并将其存储回Stock_currency表

这是我的PHPscript

<?php
class CurrencyConverter {

   var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
   var $localhost, $sirnur, $abc123, $mohamed, $stock_currency;
   var $exchange_rates = array();

   //Load Currency Rates

   function CurrencyConverter($host,$user,$pass,$db,$tb) {

      $this->localhost = $host;
      $this->sirnur = $user;
      $this->abc123 = $pass;
      $this->mohamed = $db;
      $this->stock_currency = $tb;

      $this->checkLastUpdated();

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SELECT * FROM ".$this->stock_currency;

      $rs =  mysql_query($sql,$conn);

      while($row = mysql_fetch_array($rs)) {

         $this->exchange_rates[$row['currency']] = $row['rate'];
      }

   }

   /* Perform the actual conversion, defaults to £1.00 GBP to USD */
   function convert($amount=1,$from="USD",$to="GBP",$decimals=2) {

      return(number_format(($amount/$this->exchange_rates[$from])*$this->exchange_rates[$to],$decimals));
   }

   /* Check to see how long since the data was last updated */
   function checkLastUpdated() {
      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "SHOW TABLE STATUS FROM ".$this->mohamed." LIKE '".$this->stock_currency."'";

      $rs =  mysql_query($sql,$conn);

      if(mysql_num_rows($rs) == 0 ) {

         $this->createTable();
      } else {
         $row = mysql_fetch_array($rs);
         if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {

            $this->downloadExchangeRates();
         }
      }
   }

   /* Download xml file, extract exchange rates and store values in database */

   function downloadExchangeRates() {
      $currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
      $currency_file = substr($this->xml_file,strpos($this->xml_file,"/"));
      $fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10);
      if($fp) {

         $out = "GET ".$currency_file." HTTP/1.1\r\n";
         $out .= "Host: ".$currency_domain."\r\n";
         $out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
         $out .= "Connection: Close\r\n\r\n";
         fwrite($fp, $out);
         while (!feof($fp)) {

            $buffer .= fgets($fp, 128);
         }
         fclose($fp);

         $pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is";
         preg_match_all($pattern,$buffer,$xml_rates);
         array_shift($xml_rates);

         for($i=0;$i<count($xml_rates[0]);$i++) {

            $exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i];
         }

         $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

         $rs = mysql_select_db($this->mohamed,$conn);

         foreach($exchange_rate as $currency=>$rate) {

            if((is_numeric($rate)) && ($rate != 0)) {

               $sql = "SELECT * FROM ".$this->stock_currency." WHERE currency='".$currency."'";
               $rs =  mysql_query($sql,$conn) or die(mysql_error());
               if(mysql_num_rows($rs) > 0) {

                  $sql = "UPDATE ".$this->stock_currency." SET rate=".$rate." WHERE currency='".$currency."'";
               } else {

                  $sql = "INSERT INTO ".$this->stock_currency." VALUES('".$currency."',".$rate.")";
               }

               $rs =  mysql_query($sql,$conn) or die(mysql_error());
            }

         }
      }
   }

   /* Create the currency exchange table */
   function createTable() {

      $conn = mysql_connect($this->localhost,$this->sirnur,$this->abc123);

      $rs = mysql_select_db($this->mohamed,$conn);

      $sql = "CREATE TABLE ".$this->stock_currency." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $sql = "INSERT INTO ".$this->stock_currency." VALUES('EUR',1)";

      $rs =  mysql_query($sql,$conn) or die(mysql_error());

      $this->downloadExchangeRates();
   }

}

包含文件

<?php
   include('CurrencyConverter.php');
   $x = new CurrencyConverter('localhost','root','root','mohamed','Stock_Currency');

//  mysql_query("ALTER TABLE Stock_currency  add column We_sell varchar (20) ; ") or die(mysql_error());
//  mysql_query("ALTER TABLE Stock_currency  add column We_buy varchar (20) ; ") or die(mysql_error());  


   ?> 

1 个答案:

答案 0 :(得分:0)

执行所需操作的SQL查询类似于:

select c.ccy, c.rate/EuroGBP.rate as GBPExchangeRate
from Currency c cross join
     (select rate from Currency c where c.ccy = 'GPB') EuroGBP