使用TIMESTAMPDIFF PHP MYSQL同时更新结束时间和持续时间

时间:2014-07-15 04:54:01

标签: php mysql duration

我想在同一查询/操作中更新“持续时间”和“ end_time ”字段。 “ end_time ”字段填充当前时间,“持续时间”字段从“开始”和“ end_time '领域。当我执行此更新时,“持续时间”字段中的结果为0.如何同时获取end_time和duration。

这是php代码:

<?php
include("koneksi.php");
$id     = $_GET['id'];
$start  = gmdate("Y-m-d H:i:s", time()+60*60*7);
$end_time   = gmdate("Y-m-d H:i:s", time()+60*60*7);
$duration  = $_POST['duration'];


$query = "update billing set end_time='$end_time', duration = TIMESTAMPDIFF(MINUTE, '$start', '$end_time') where id='$id'";

$result = mysql_query($query);
if ($result){
echo '<script language="javascript">window.location = "../?p=los"</script>'; 
} ?>

2 个答案:

答案 0 :(得分:0)

持续时间设置为0,因为$start$end_time相同。

考虑你的代码:

$start  = gmdate("Y-m-d H:i:s", time()+60*60*7);
$end_time   = gmdate("Y-m-d H:i:s", time()+60*60*7);

$query = "... TIMESTAMPDIFF(MINUTE, '$start', '$end_time') ...";

因为$start == $end_time,差异将始终为0.

您可能希望使用已存储在数据库中的start_time值,而不是最近创建的php变量$start。也许是这样的:

$query = "
 update billing set 
 end_time='$end_time', 
 duration = TIMESTAMPDIFF(MINUTE, start_time, '$end_time') 
 where id='$id'
";

其中start_time是数据库中的一列。


注意: mysql_* functions are deprecated,您很容易受到SQL injection的影响。请考虑使用mysqlipdo并使用prepared statements

答案 1 :(得分:0)

感谢您的回答,这是我的修复代码

$query = "update billing set , end_time='$end_time', 
 duration = TIMESTAMPDIFF(MINUTE, start, '$end_time'),
 cost = TIMESTAMPDIFF(MINUTE, start, '$end_time') * (SELECT basiccost from costed where id ='1')
 where id='$id'";