【问题标题】:PHP and mySQL, working with current date?PHP 和 mySQL,使用当前日期?
【发布时间】:2012-04-23 13:57:49
【问题描述】:

PHP 和 mySQL 问题我希望你能帮助我。我有一个更新数据库选项(通过单击一个按钮,它会运行 update.php 文件),现在这个 update.php 负责尝试分离我的 PASSENGER 表。

目前,我有一个巨大的 PASSENGER 表,如果今天发生了与公司的旅行(它是一家旅行预订公司),那么他们在 CUSTOMER 表中,但我想要任何存档的客户(例如,任何人从昨天开始倒退,放入 ARCHIVED_CUSTOMER 表中。

现在,我有一个小的 PHP 脚本,它使用当前 PASSENGER 表中的信息添加到 ARCHIVED_PASSENGER 表中,但仅限于参数是 PASSENGER ID 的地方。

我对脚本的 DELETE FROM PASSENGER 部分非常满意,但想知道是否有人知道可以让我从数据库中收集和移动大量信息的代码,其中旅行日期是昨天起等等。它是通过 PASSENGER 表的 activeUntil 部分完成的。

非常精简的 PHP 脚本,但希望我已经说清楚了!

   mysql_connect("localhost", "mysql_username", "mysql_password") or die(mysql_error());
    mysql_select_db("mysql_database") or die(mysql_error());

    $query10 = ("SELECT p.surname, p.passNo, p.activeUntil FROM PASSENGER p WHERE passNo = '20120003'");

            $result = mysql_query($query10);  
            while($row = mysql_fetch_array($result))
            {

$surname =  $row['surname'];
$passNo = $row['passNo']; 

mysql_query("INSERT INTO ARCHIVED_PASSENGER (surname, passNo) VALUES ('$surname', '$passNo')  ") 
    or die(mysql_error());  

    mysql_query("DELETE FROM PASSENGER (surname, passNo) VALUES ('$surname', '$passNo')  ") 
    or die(mysql_error());  


        }

【问题讨论】:

  • 小心SQL注入!!你的代码很容易受到攻击!
  • @Romain 请指出注入漏洞。我没看到。
  • @Kolink "INSERT INTO ARCHIVED_PASSENGER (surname, passNo) VALUES ('$surname', '$passno')"。当乘客的姓氏是(随机选择)"D'Artagnan" 时会发生什么?这是一种无害的复杂间接注入,但至少是合理/可能的崩溃来源。
  • 啊,我的假设是数据已经在数据库中......当然。请注意,通过我的回答中的组合查询,这个问题被消除了,所以我猜我们最终都没有错。

标签: php mysql sql sql-insert sql-delete


【解决方案1】:

NOW() 在 MySQL 中给出当前时间戳。 24 小时前是DATE_ADD(NOW(),INTERVAL -1 DAY)

您可以像比较数字一样比较日期:activeUntil < DATE_ADD(NOW(),INTERVAL -1 DAY) 选择 activeUntil 为 24 小时前之前的任何内容的行。

您可以像这样组合INSERTSELECT

INSERT INTO `archived_passenger` (columns.....) SELECT columns... FROM `passenger` WHERE ...

(如果achived_passenger中的列名与passenger中的列名完全匹配,则可以省略第一组列,如果要全选,可以使用*代替第二组列列)

我认为这应该足以帮助您完成您想做的事情。如果您需要任何其他帮助,请告诉我。

【讨论】:

  • 你的解释太棒了,很好的答案。谢谢。
  • 不客气,很高兴我能帮上忙 :) 祝你项目的其余部分好运!
【解决方案2】:

假设您的“旅行日期”字段名为 activeUntil,它的数据类型为 DATEDATETIME

... WHERE activeUntil >= DATE_ADD(NOW(), INTERVAL -1 DAY)

编辑:<=,具体取决于您所说的“从昨天开始”。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2011-09-14
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多