【问题标题】:Insert PHP date into MySQL database将 PHP 日期插入 MySQL 数据库
【发布时间】:2015-01-22 16:39:59
【问题描述】:

我需要将表单中的日期字段插入 mysql 数据库。如果用户没有输入日期,则应使用当前日期。我的代码是:

if ($_POST[date]==0)
    {$ref_date=date('Y-d-m');}
    else {$ref_date=$_POST[date];}

$L="insert into referral (ID,patient, Doctor,Date) values (default,$pat,$doc,'$ref_date')";
        mysql_query($L) or die(mysql_error());

当我在表单中提交日期时它可以正常工作,但是当我将该字段留空时,它会输入 0000-00-00。

【问题讨论】:

  • 您的代码包含 SQL 注入!切勿在 SQL 语句中使用变量。如果您需要在语句中使用参数,请使用准备语句和/或参数!
  • 您的权利。我实际上正在切换到一种 pd​​o 形式,但是由于我不确定错误在哪里,所以我编写了这样的查询以确认问题不在我的实现中,然后我想如果我像这样发布它每个人都会理解查询,而不是我需要解释我的所有功能。使用 mysql_query 我可以回显我的函数并直接在 MySQL 中对其进行测试以查找错误。有没有办法使用参数做类似的事情?

标签: php mysql date


【解决方案1】:

MySQL 期望日期为YYYY-MM-DD 格式。你有YYYY-DD-MM。变化:

$ref_date=date('Y-d-m');

到:

$ref_date=date('Y-m-d');

【讨论】:

    【解决方案2】:

    不过,您应该注意,Apache(或您使用的任何 php 服务器)可能与您的 MySQL 服务器有不同的时间/时区。

    假设 Apache 的服务器比 MySQL 早 2 小时。如果是 1 月 22 日凌晨 1 点(在 Apache 中),那么使用 date('Ỹ-m-d') 将返回 2015-01-22,而 CURDATE()(MySQL 当前日期的函数)将返回 2015-01-21。

    因此,有两种可能的解决方案。一种是 John Conde 的解决方案:

    $ref_date = date('Y-d-m');
    

    另一个是插入 CURDATE():

    $ref_date = 'CURDATE()';
    

    【讨论】:

    • 所以 $ref_date 会变成字符串 "CURDATE()",但是 MySQL 会理解这意味着 MySQL 函数吗?
    • 没错。此外,我强烈建议您不要将参数作为字符串传递。使用更安全的东西,比如 Prepared Statements
    • 那么我怎样才能知道服务器的时区是什么?我正在使用一个主机,它为我提供了一个用于我的网页的服务器和一个 MySQL 数据库。
    • 嗯,这些信息可以在配置文件中编辑(如果我没记错的话,php.ini 用于 PHP,my.cnf 用于 MySQL)。要知道它们是否相同,您可以在一个php页面中回显完整时间(日期,小时,时区)(函数date(...)相同,但参数改变。对于mysql,您可以运行phpmyadmin页面(或 mysql -u 通过终端访问)并运行“select *, now() from ;”
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 2016-04-11
    • 1970-01-01
    • 2017-06-25
    • 2017-07-08
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多