TransWikia.com

DATETIME en MySQL no registra correctamente la fecha

Stack Overflow en español Asked by Silvestre Silva on December 4, 2020

tengo el siguiente problema. Uso la librería datetimepicker para seleccionar una fecha en un formulario y registrarlo en la base de datos. El problema es que quiero registrar la fecha en el formato de MySQL pero no me registra la hora, es decir en el formulario selecciono el formato de esta manera 2017-09-28 11:32:34 pero en la base de datos solo me registra 2017-09-28 00:00:00

Cabe destacar que hice un var_dump en PHP y si me imprime la fecha con todo y hora seleccionada, entonces no entiendo porque me causa el error, comentar también que el tipo de dato que uso en MYSQL es el DATETIME

Informacion de las filas

Muestra el error(detalle)

//Seccion Insertar

if($page=='create'){
    if($_POST) {
        $validator = array('success' => false, 'messages' => array());
        if(isset($_SESSION['u_usuario']['PK_idUsuario'])){
            #Obtener el Usuario que inició sesion para saber quién está manipulando los tickets.
            $usuarioCreado = $_SESSION['u_usuario']['PK_idUsuario'];
            $fechaVencimiento = $_POST["fechaFinal"];

            $color = $_POST["colorNota"];
            $regDescripcion = $_POST["regDescripcion"];
            $status = 1;

            $sql="INSERT INTO recordatorio (fechaVencimiento, descripcion, status, color, FK_idUsuario) VALUES ('$fechaVencimiento','$regDescripcion','$status', '$color', '$usuarioCreado')";              
            $query = $con->query($sql);         
            var_dump($sql);

            if($query === TRUE ) {
                $validator['success'] = true;
                $validator['messages'] = "Recordatorio creado correctamente";               

            } else {
                $validator['success'] = false;
                $validator['messages'] = "Error al crear el recordatorio";                  
            }
        }else{
            $validator['success'] = false;
            $validator['messages'] = "Sesion caducada, recargue la página e inicie sesion nuevamente para registrar un nuevo recordatorio.";
        }

        $con->close();
        echo json_encode($validator);
    }
}


#Seccion Recuperar
else if($page=='read'){
    $output = array('data' => array());
    $query = $con->query("SELECT * FROM recordatorio WHERE status = 1 ORDER BY fechaVencimiento ASC");

    $x = 1;

    while ($row = $query->fetch_assoc()){
        #Almacenar los datos en el arreglo.
        $btnEvento ='
        <button data-toggle="modal" data-target="#modaleditarRecordatorio" type="button" class="btn btn-info btn-sm" title="Editar" onclick="editarRecordatorio('.$row['PK_idRecordatorio'].')"><i class="fa fa-pencil"></i></button>
        <button data-toggle="modal" data-target="#modaleliminarRecordatorio" type="button" class="btn btn-danger btn-sm" title="Eliminar" onclick="eliminarRecordatorio('.$row['PK_idRecordatorio'].')"><i class="fa fa-trash"></i></button>                
        ';


        $descripcion = '<p style="color:#0088cc">'.$row['descripcion'].'</p>';
        $output['data'][] = array(
            $x,
            $descripcion,
            $row['fechaInicio'],
            $row['fechaVencimiento'],
            $btnEvento
        );
    $x++;
    }
    $con->close();
    echo json_encode($output);
}

One Answer

El formato de fechas para un campo del tipo datetime en MySQL es:

AÑO-MES-DIA HORA:MINUTOS:SEGUNDOS

Por lo que tal como te sugiere Mario Alejandro Gonzalez Flore, debes formatear bien tu fecha para la inserción. En tu caso concreto sería cambiar la siguiente línea:

$fechaVencimiento = date('Y-m-d H:i:s', strtotime($_POST["fechaFinal"]));

O bien si quieres dejar esa tarea a MySQL:

$fechaVencimiento = "STR_TO_DATE(".$_POST["fechaFinal"].", '%d/%m/%Y %H:%i:%s')";

Y en dónde dice "%d/%m/%Y %H:%i:%s" puedes especificar como tienes el formato original.

Decir también que no es buena idea colocar un POST directamente en la SQL sin tratar ya que existe la posibilidad de ataques de SQL Injection, te recomiendo ver el siguiente enlace:

¿Cómo evitar la inyección SQL en PHP?

Answered by track3r on December 4, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP