我有一个表,从这个表中,我想做一些数学运算(比如求和),然后我想把结果保存在表中的一个单独的列中。
这是我的桌子
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 !
有什么帮助吗?我想,我的代码只是从第一个代码中获取数据,我该如何解决这个问题?
这里有几个问题,这项任务可以更容易地完成。然而,既然这听起来像是你在尝试并想学习,那么让我们集中精力研究你的代码。
直接的问题是代码的结构。你执行你的数学运算,但是你的结构并没有按照你的预期存储结果。你必须把结构改成这样:
$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
,并了解"准备好的语句"answers"参数绑定"对代码的优势,这样您就不会遇到"sql注入漏洞"的典型问题。
正如开头提到的,通过不在php中执行数学计算,而是直接在mysql中执行,当然可以简化整个任务。这样,您只需要一个完成所有工作的sql更新语句:UPDATE xxx SET C=A+B;
。但正如前面提到的,你的问题看起来像是在努力进入这个领域,所以在继续前进之前,首先让你自己的代码工作可能是一个非常好的主意。
这可能是您想要做的
UDPATE xxx SET C = A + B
首先,请勿使用已弃用的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
。