2013-04-23 76 views
3

我的PHP代码有问题。我在MySQL数据库中有一系列的列,PotVal,Current,ID,kWh和costKwh。其中ID是AUTO_INCREMENT,PotVal和Current来自文本文件 - 这些工作正常并且数据存储良好。但我想采取PotVal,它实际上是感应功率,并使用(PotVal * 1)/(900)(不要担心,我知道它的1000通常不是900)将其转换为KiloWatt小时数 - 这也工作正常,输出数据实时,但我试图将这个值存储在我的千瓦时柱。接下来,我使用这个千瓦时柱子来计算每千瓦时的成本(千瓦时* 18.56)。但是由于没有将数据存储在kWh列中,我得到了0.00的输出,我无法纠正它!PHP MySQL数据库推拉

因此,总之为什么我无法存储千瓦时?而且我想显示的值为小数点后两位,但实际显示的小数点后六位!

<?php 

header('Refresh: 1.5'); 

// Set relevent pseudo-variables 
    $hostname = 'localhost'; 
    $username = 'root'; 
    $password = ''; 
    $table = 'received_data'; 
    $drop = 'DROP TABLE received_data'; 
    $iwemsdatafile = 'IWEMSData.txt'; 

// Connect to MySQL 

    $dbconnect = mysql_connect($hostname, $username, $password) 
     or die('Unable to connect to MySQL: ' . mysql_error()); 
    // echo 'Connected to MySQL<br>'; 

    mysql_query($drop); 

// Create database, table and columns 

    $cdb = 'CREATE DATABASE IWEMS_Data'; 
    // echo 'IWEMS_Data has been created<br /><hr />'; 

    $selectdb = mysql_select_db('IWEMSData',$dbconnect) 
     or die('Could not select IWEMSData'); 
    // echo 'Connected to IWEMSData database<br />'; 

    mysql_query($drop); 

    $ctb = 'CREATE TABLE received_data 
    (
    Current DECIMAL(30,2) NOT NULL, 
    PotVal DECIMAL(30,2) NOT NULL, 
    kWh DECIMAL(30,2) NOT NULL, 
    costkWh DECIMAL(30,2) NOT NULL, 
    ID BIGINT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(ID,PotVal,Current) 
    )'; 

    mysql_query($ctb, $dbconnect); 
    // echo 'Received_Data Table has been created<br />'; 
    // echo 'Current, PotVal and ID columns have been created<br /><hr />'; 

// Push IWEMSData.txt data into MySQL database 

    mysql_query 
    (' 
    LOAD DATA LOCAL INFILE "IWEMSData.txt" 
    REPLACE INTO TABLE received_data 
    FIELDS TERMINATED BY " " 
    LINES TERMINATED BY "\\r\\n" 
    (PotVal, Current) 
    ;') 
    or die('Error Loading Data File.<br>' . mysql_error()); 

// Pull IWEMSData from MySQL database 

    $seldat = 'SELECT * FROM received_data ORDER BY ID DESC LIMIT 1'; 


    $data = mysql_query($seldat) 
     or die('Error retrieving data: ' . mysql_error()); 

// Display data on web browser 

    while ($finalrow = mysql_fetch_array($data)) 
    { 
     echo '<hr /> Apparent Power<br />'; 
     echo $finalrow['PotVal']; 
     echo ' Watts'; 
     echo '<br /><hr />'; 
     echo 'Detected Current<br />'; 
     echo $finalrow['Current']; 
     echo ' Amps'; 
     echo '<br /><hr />'; 
    } 

// Display per kWh data on web browser 

    $perkWh = 'SELECT *, (PotVal/900) AS kWh 
    FROM received_data ORDER BY ID DESC LIMIT 1'; 

    $qperkWh =mysql_query($perkWh) or die('Error'); 

    while ($finalkWh = mysql_fetch_array($qperkWh)) 
    { 
    echo 'kWh<br />'; 
    echo $finalkWh['kWh']; 
    echo '<br /><hr />'; 
    } 


// Display cost per kWh data on web browser 

    $cperkWh = 'SELECT *, (kWh*18.67) AS costkWh 
    FROM received_data ORDER BY ID DESC LIMIT 1'; 

    $cqperkWh =mysql_query($cperkWh) or die('Error'); 

    while ($cfinalkWh = mysql_fetch_array($cqperkWh)) 
    { 
    echo 'Cost kWh<br />'; 
    echo $cfinalkWh['costkWh']; 
    echo '<br /><hr />'; 
    } 

// Close Database connection when complete 

    mysql_close($dbconnect); 
?> 

(我敢打赌那是一些简单的...再次!)

+1

你的插入语句在哪里? – 2013-04-23 09:55:08

+1

从你如何设置,你为什么需要第二个选择?只需在PHP中进行计算:'$ finalkWh ['kWh'] * 18.67'?无论如何,你将查询限制为1,所以你不需要while循环,而且你不需要第二个查询,因为你拥有第一个的所有信息。 ^^ – Jon 2013-04-23 09:57:10

+1

Yogesh感谢虐待不同的方法,并让你知道我如何得到!谢谢你的建议。 – 2013-04-23 10:05:32

回答

2
$perkWh = 'SELECT *, (PotVal/900) AS kWh 
FROM received_data ORDER BY ID DESC LIMIT 1'; 

我想你已经在received_data表有kWh列,所以你不能命名为(PotVal/900)kWh

同样的问题$cperkWh = 'SELECT *, (kWh*18.67) AS costkWh FROM received_data ORDER BY ID DESC LIMIT 1'; costkWh

+0

所以,如果我删除千瓦列,它会为我创造它? – 2013-04-23 10:28:39

+0

是的......如果你需要它,你可以使用'SELECT *,(PotVal/900)AS kWh1 ...'例如 – Amir 2013-04-23 10:30:48

+0

@ user2300686你想要做什么?你想更新'kWh'列到'(PotVal/900)'?如果是的话,你应该使用'UPDATE'或'INSERT'语句,而不是'SELECT' – Amir 2013-04-23 10:33:51

1

我看你有大写字母在你的查询中。当我使用这种类型的查询时,我记得使用大写字母时出现了一些奇怪的问题。所以我建议你不要使用大写字母,只能使用小写字母。

如果你想使用大写字母一定要附上你所有的数据库,列,表中引号的名字我的意思是使用像

`kWh` 

,并检查是否问题仍然存在。这可能不是问题,但它可能是它。 :)

和一个建议是,不要使用mysql*功能,他们可能会被弃用,他们是开放的许多安全问题,如注射。改为使用PDO。你可以在PHP文档中看到文档。