2013-04-23 36 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文檔中看到文檔。