3

我的 PHP 代码有问题。我在 MySQL 数据库中有一系列列,PotVal、Current、ID、kWh 和 costKwh。其中 ID 为 AUTO_INCREMENT,PotVal 和 Current 来自文本文件 - 它们工作正常并且可以正常存储数据。但是我想使用 PotVal,它实际上是感应到的功率,并使用 (PotVal*1)/(900) 将其转换为千瓦时(别担心,我知道它的 1000 通常不是 900) - 这也可以正常工作并输出实时数据,但是我试图将此值存储在我的 kWh 列中。接下来,我使用此 kWh 列使用 (kWh*18.56) 对每 kWh 的成本进行另一次计算。但是,由于没有在 kWh 列中存储数据,我得到 0.00 的输出,我无法纠正它!

总而言之,为什么我不能以 kWh 存储?而且我想将值显示到小数点后两位,但实际上显示到小数点后六位!

<?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);
?>

(我打赌这很简单......再次!)

4

2 回答 2

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

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

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

于 2013-04-23T10:16:18.110 回答
1

我看到您的查询中有大写字母。当我处理这种类型的查询时,我记得使用大写查询时遇到了一些奇怪的问题。所以我真的建议你不要使用大写字母而只使用小写字母。

如果你想使用大写字母,请务必将所有数据库、列、表名括在引号中,我的意思是使用 like

`kWh`

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

一个建议是不要使用mysql*它们可能会被弃用的功能,并且它们会面临许多安全问题,例如注入。改为使用PDO。您可以在 PHP 文档中查看文档。

于 2013-04-23T10:25:40.940 回答