php添加具有特定id的列以及如何回显精确id的结果

时间:2013-01-30 12:38:12

标签: php mysql sum

id  1stPayment  2ndPayment  3rdPayment  4thPayment  Tuition 
8   0           200         2000            2000            9000    
8   2000        0           0               0                 0
9   0           0           0               0               1000    
10  1           0           0               0               0

我想添加id-8的所有学费并回复学费总和的结果。如何在不增加其他身份证的学费的情况下总结所有学费。表名是“students_payments”......“我也想在自己的页面中回复一个id的学费,就像我访问id-8的帐户一样,它显示了学费的总和。:D

我有这个代码,但是当我访问id-9和id-10的帐户时,它会显示所有学费的附加价值。 tnx in advanced ..:D

<?php

include("confstudents.php");
$id = $_GET['id'];

$result = mysql_query("select * from student_payments where id='$id' ");
while ($res = mysql_fetch_assoc($result)) {

    $result = mysql_query("SELECT SUM(Tuition) FROM student_payments");
    while ($row = mysql_fetch_assoc($result)) {
        $TT = $row['SUM(Tuition)'];
        echo "Php $TT";
    }
}
?> 

3 个答案:

答案 0 :(得分:1)

您的查询应该是

SELECT SUM(Tuition) as TotalTuition FROM student_payments WHERE id='$id' GROUP BY id

然后你可以回复TotalTuition。


警告

您的代码容易受到sql injection攻击,您需要撤消所有getpost,更好的方法是使用Prepared statement

好读

  1. How to prevent SQL injection in PHP?
  2. Are PDO prepared statements sufficient to prevent SQL injection?

  3. 注意

    1. 整个 ext/mysql PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDOMySQLi
    2. 好读

      1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
      2. PDO Tutorial for MySQL Developers
      3. Pdo Tutorial For Beginners

答案 1 :(得分:0)

<?php

include("confstudents.php");
$id = $_GET['id'];
$result = mysql_query("SELECT SUM(Tuition) FROM student_payments where id='$id'");
while ($row = mysql_fetch_array($result)) {
    $TT = $row['SUM(Tuition)'];
    echo "$TT";
}
?>

答案 2 :(得分:0)

关于您的代码的一些事项:

始终将数据转换为您期望的数据(在您的id的情况下,应该是整数)。

永远不要将任何未转义的字符串放入SQL查询中。您永远不知道人们在您的应用程序输入字段中键入了什在这种情况下,我不使用mysql_escape,因为id被转换为整数,这对查询没有任何影响。

从不(!)在循环中使用mysql_query。你永远不需要它,它总会减慢你的应用程序而不提供任何用途。

如果您的数据库需要一个整数,那么给它一个整数而不是一个字符串。 id应该是一个整数,但'$ id'将始终是一个字符串。不幸的是,MySQL默默地试图将其转换为整数而不是抱怨......

因为我非常挑剔:id是标识符的缩写,这反过来意味着你可以通过它识别某些东西。由此产生的标识符必须始终是唯一的。我希望你选择它只是为了解释你的问题。

尽可能使用'而不是'来表示字符串。这将使PHP解析器不会尝试解释字符串。使代码更节省更快。

虽然不推荐使用mysql_ *函数,但我只扩展了你的代码。因此,对于您的问题的答案,请参阅下面的代码。

<?php

include("confstudents.php");
$id = (int)$_GET['id'];  // cast to int to prevent SQL injection; if you can't do that (e.g. it is a string), use mysql_escape()
if ($id <= 0) {   // check if the id is at all valid and break here if it isn't
    die('Invalid ID');
}

$result = mysql_query('SELECT SUM(tuition) sum_tuition FROM student_payments WHERE id = ' . $id);
if ($result === FALSE) {   // Check if the statement was able be processed
    die('Error in SQL statement');   // break here, if it wasn't
}
$res = mysql_fetch_assoc($result);   // with the SQL above, there's always exactly one row in the result
echo 'Php ' . $res['sum_tuition'];
?>

您可以添加一些调试代码,例如mysql_error(),以查找SQL语句中的错误。但是不要向用户显示。他们可能知道,如何利用它来利用你的应用......