PHP mysql插入日期格式


PHP mysql insert date format

我使用的是jQuery日期选择器日期选择器的格式是08/25/2012

我在插入数据库时出错,它只插入0000-00-00 00 00

我的代码是:

<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>

我确信我的插入是正确的。

如日期和时间文字中所述:

MySQL识别以下格式的DATE值:

  • 作为'YYYY-MM-DD''YY-MM-DD'格式的字符串。允许使用"宽松"语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31'是等效的。

  • 作为'YYYYMMDD''YYMMDD'格式中没有分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523''070523'被解释为'2007-05-23',但'071332'是非法的(它有无意义的月和日部分),并成为'0000-00-00'

  • 作为YYYYMMDDYYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905830905被解释为'1983-09-05'

因此,字符串'08/25/2012'不是有效的MySQL日期文字。您有四种选择(按照模糊的偏好顺序,没有任何关于您需求的进一步信息):

  1. 将Datepicker配置为使用altField及其altFormat选项以支持的格式提供日期:

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    或者,如果你很高兴用户看到YYYY-MM-DD格式的日期,只需设置dateFormat选项:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. 使用MySQL的STR_TO_DATE()函数转换字符串:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. 将从jQuery接收到的字符串转换为PHP理解为日期的东西,例如DateTime对象:

    $dt = 'DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    然后:

    • 获得合适的格式化字符串:

      $date = $dt->format('Y-m-d');
      
    • 获取UNIX时间戳:

      $timestamp = $dt->getTimestamp();
      

      然后直接传递给MySQL的FROM_UNIXTIME()函数:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. 手动将字符串操作为有效的文字:

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

警告

  1. 您的代码容易受到SQL注入的攻击实际上应该使用准备好的语句,将变量作为参数传递到其中,而这些参数不会针对SQL进行评估。如果你不知道我在说什么,也不知道如何解决这个问题,那就读博比·Tables的故事。

  2. 此外,正如PHP手册介绍mysql_*函数一章中所述:

    从PHP 5.5.0开始,该扩展已被弃用,不建议用于编写新代码,因为它将来会被删除。相反,应该使用mysqli或PDO_MySQL扩展。请参阅MySQL API概述,以获取选择MySQL API时的进一步帮助。

  3. 您似乎使用了DATETIMETIMESTAMP列来保存日期值;我建议您考虑使用MySQL的DATE类型。如DATEDATETIMETIMESTAMP类型:中所述

    DATE类型用于具有日期部分但没有时间部分的值。MySQL检索并显示'YYYY-MM-DD'格式的DATE值。支持的范围为'1000-01-01''9999-12-31'

    DATETIME类型用于同时包含日期和时间部分的值。MySQL检索并显示'YYYY-MM-DD HH:MM:SS'格式的DATETIME值。支持的范围为'1000-01-01 00:00:00''9999-12-31 23:59:59'

    TIMESTAMP数据类型用于同时包含日期和时间部分的值。CCD_ 46的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。

您应该考虑使用mktime()从该日期创建时间戳

例如:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
$date_field         = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());

您必须确保jQuery输出的日期格式为YYYY-MM-DD。我可以看到jQuery返回MM-DD-YYYY,这不是有效的MySQL日期格式,这就是它返回错误的原因。

要将其转换为正确的,您可以这样做:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

然后,您将获得有效MySQL格式的格式化日期,即YYYY-MM-DD,即22012-08-25

我还建议在将数据插入数据库时使用mysql_real_sescape_string,以防止SQL注入作为快速解决方案,或者更好地使用PDO或MySQLi。

使用mysql_real_escape_string的插入查询应该是这样的:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );

使用从jquery日期选择器中获取日期对象

var myDate = $('element').datepicker('getDate')

对于mysql,日期需要采用正确的格式。处理任何时区问题的一个选项是使用moment.js

moment(myDate).format('YYYY-MM-DD HH:mm:ss')

最简单的方法是

$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];
$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());

HTML:

<div class="form-group">
  <label for="pt_date" class="col-2 col-form-label">Date</label>
  <input class="form-control" type="date" value=<?php echo  date("Y-m-d") ;?> id="pt_date" name="pt_date">
</div>

SQL

$pt_date = $_POST['pt_date'];
$sql = "INSERT INTO `table` ( `pt_date`) VALUES ( '$pt_date')";

假设您收到一个圣诞节日期:2021年12月25日(2021年2月25日),字符串格式:";d-m-Y";例如";12-25-2021";。首先根据接收到的格式创建一个有效的DateTime对象:

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021", new DateTimeZone("America/Argentina/Buenos_Aires")));

这将生成输出:

object(DateTime)#2 (3) {
  ["date"]=>
  string(26) "2021-12-25 10:21:11.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(30) "America/Argentina/Buenos_Aires"
}

现在使用格式("Y-m-d H:i:s")从DateTime对象中获取日期字段

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"))->format("Y-m-d H:i:s"));

这将生成一个准备插入值作为输出:

string(19) "2021-12-25 10:56:30"

总之,现在您可以在MySQL中插入格式化日期('DD-MM-YYY'),如下所示:

<?php
//string input post like "25-12-2021"
$date_input = $_POST['date_input']; 
//create DateTime object
$date_time_obj=DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"));
//format date ready to insert as string at MySQL
$str_date=$date_time_obj->format("Y-m-d H:i:s");
?>

现在直接从PHP运行到MySQL作为查询:

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
//verify connection
if (mysqli_connect_errno()) {
    printf("Error de conexión: %s'n", mysqli_connect_error());
    exit();
}
//prepare the query to execute
$stmt = $mysqli->prepare("INSERT INTO table_example (DATE_FIELD) VALUES (?)");
//prevent sql injection
$stmt->bind_param('s', $str_date);
//execute prepared statements
$stmt->execute ();
?>

这些天,我对约会不太好。由于以下工作,我可以按我想要的格式打印日期。

$year = $_POST['year'];
$month = $_POST['month'];
$day = $_POST['day'];
$scr = strtotime($year . '-' . $month . '-' . $day);
$gelis_tarihi = date('Y-m-d', $scr);
$yil = $_POST['yil'];
$ay = $_POST['ay'];
$gun = $_POST['gun'];
$birlestir = strtotime($yil . '-' . $ay . '-' . $gun);
$gelis_tarihi = date('Y-m-d', $birlestir);

试试这样的东西。。

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);

首先存储$date=$_POST['your date field name'];

insert into **Your_Table Name** values('$date',**other fields**);

您必须在单个科特('')中包含日期

我希望这会有所帮助。