我有表,从这个表中,我想做一些数学运算(例如sum)然后我想将结果保存在表中的一个单独的列中。
所以这是我的表
table: xxx
! code ! A ! B ! C !
---------------------------------
! 0001 ! 4 ! 2 ! !
! 0002 ! 2 ! 1 ! !
! 0003 ! 1 ! 4 ! !
! 0004 ! 3 ! 5 ! !
然后我使用此代码调用查询,并保存数学运算。
$mySql = "SELECT * FROM xxx ORDER BY code ASC ";
$myQry = mysql_query($mySql, $koneksidb) or die ("Query salah : ".mysql_error());
while ($myData = mysql_fetch_array($myQry))
$sum = $myData['A'] + $myData['A']
$mySql = "UPDATE xxx SET C='$sum' WHERE code='$Kode'";
$myQry = mysql_query($mySql, $koneksidb) or die ("Gagal query".mysql_error());
while ($myData = mysql_fetch_array($myQry))
{
$Kode = $myData['code'];
}
我的问题是,它不像我想要的那样出现。 我想这样:
table: xxx
! code ! A ! B ! C !
---------------------------------
! 0001 ! 4 ! 2 ! 6 !
! 0002 ! 2 ! 1 ! 3 !
! 0003 ! 1 ! 4 ! 5 !
! 0004 ! 3 ! 5 ! 8 !
但这就是我所拥有的
table: xxx
! code ! A ! B ! C !
---------------------------------
! 0001 ! 4 ! 2 ! 6 !
! 0002 ! 2 ! 1 ! 6 !
! 0003 ! 1 ! 4 ! 6 !
! 0004 ! 3 ! 5 ! 6 !
任何帮助?我想,我的代码只是从第一个代码中获取数据,我该如何解决这个问题?
答案 0 :(得分:3)
这里有几个问题,这项任务可以更轻松地完成。然而,因为这听起来像你正在尝试的东西,并希望学习让我们专注于你的代码。
直接问题是代码的结构。您执行数学运算,但结构不会按预期存储结果。你必须将结构更改为:
$selectQuery = "SELECT * FROM xxx ORDER BY code ASC";
$selectResult = mysql_query($selectQuery, $koneksidb) or die ("Query salah: ".mysql_error());
while ($myData = mysql_fetch_array($selectResult)) {
$sum = $myData['A'] + $myData['B'];
$code = $myData['code'];
$updateQuery = "UPDATE xxx SET C='$sum' WHERE code='$code'";
mysql_query($updateQuery, $koneksidb) or die ("Gagal query: ".mysql_error());
}
尤其不是while
命令使用的花括号:while (...) { ... }
。
一般警告:您在此处使用旧的,过时的和已弃用的mysql
扩展程序。您应该查看当前的替代mysqli
或PDO
,并了解代码的“预处理语句”和“参数绑定”的优点,这样您就不会遇到典型问题“sql注入漏洞”。
如开头所述,通过不在php中执行数学计算,而是直接在mysql中执行,可以简化整个任务。这样,您只需要一个sql update语句来完成所有工作:UPDATE xxx SET C=A+B;
。但正如前面提到的那样,你的问题似乎正在尝试进入这个领域,所以在继续之前首先让你自己的代码工作可能是一个非常好的主意。
答案 1 :(得分:1)
这可能是您尝试做的事情
UDPATE xxx SET C = A + B
答案 2 :(得分:1)
首先, 不要使用 已弃用的 mysql_*
API!
其次,你非常复杂。如果您想要做的只是添加A + B并将结果存储在每行的C 中,您可以在单个SQL查询中执行此操作,如Tin Tran建议的那样。
完整的代码将是
$query = "UPDATE xxx SET c = a + b";
mysql_query($query, $koneksidb) or die("Gagal query".mysql_error());
(这两行会替换问题中显示的所有代码。)
尽管如我所说,您应该立即迁移到mysqli
或PDO
。