【问题标题】:Update end time and duration in same time, using TIMESTAMPDIFF PHP MYSQL使用 TIMESTAMPDIFF PHP MYSQL 同时更新结束时间和持续时间
【发布时间】:2014-09-05 04:03:46
【问题描述】:

我想更新同一查询/操作中的“duration”和“end_time”字段。 'end_time' 字段填充当前时间,'duration' 字段从'start' 和 'end_time 之间的不同分钟填充>' 字段。当我执行此更新时,“duration”字段中的结果为 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>'; 
} ?>

【问题讨论】:

  • $id 来自 GET 方法,$duration 来自 POST 方法。不能同时使用这两种方法提交表单。
  • 请告诉我正确的,谢谢
  • 请同时发布您的 html 代码
  • @rack_nilesh echo "STOP ,这是我的 html 上的代码,当我单击该链接时,它将返回 updatelos.php ,该代码类似于上面的帖子。
  • 您不应在此处设置 $start 值。这里 $start 和 $end_time 代表与当前时间相同的值。这就是为什么您将持续时间设为 0。

标签: php mysql duration


【解决方案1】:

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

$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'";

【讨论】:

    【解决方案2】:

    持续时间设置为 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

    【讨论】:

    • 如果不是 $start == $end_time,当我执行时它不会在 'duration' 字段中保存任何内容。或者您可以帮助我更正上面的所有代码。谢谢
    • @bangkosim 在您的表billing 中,您有一个名为end_time 的字段。您还必须有一个名为start_time 的字段,对吧?这就是你想在TIMESTAMPDIFF 中使用的,not $start.
    • 我已经有了那个字段,我用'start'命名它。在上面的代码中,我使用 $start 从数据库中调用该字段。谢谢
    猜你喜欢
    • 2019-08-24
    • 1970-01-01
    • 2017-08-22
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多