首页 > 解决方案 > PHP错误未捕获mysqli_sql_exception:日期值不正确:将日期发送到MySQL时

问题描述

我花了一个下午尝试各种解决方案,但尽管有很多关于“SO”的问题,但我还是无法解决这个问题。

我的 PHP 代码在我想在 mySQL 表中插入日期的位置下方,根据屏幕截图,该表只有 3 列。 mysql表

日期到达 php 已经格式化为2020-10-03. 我的理解是这足以正确地将它们直接发送到 mySQL,但是我尝试以不同的方式转换它们,但我仍然收到以下错误: php错误

include(dirname(__DIR__).'/php/dbConnection.php');

ini_set('display_errors', 'On');
error_reporting(E_ALL);

//values passed from ajax
// $id         = $_POST['staffID'];
// $fromDate   = $_POST['startDate'];
// $endDate    = $_POST['endDate'];

//for testing > This Fails
$id         = '22';
$fromDate   = DateTime::createFromFormat('d-m-Y', '10-06-2020')->format('Y-m-d');
$endDate    = DateTime::createFromFormat('d-m-Y', '12-06-2020')->format('Y-m-d');

//for testing > This Fails
//$id         = '22';
//$fromDate   = '2020-06-30';
//$endDate    = '2020-07-30';

$data       = array();      // array to pass back data

$stmt = $conn->prepare("INSERT INTO vacation (id, from_date, to_date)
                        VALUES ($id, $fromDate, $endDate)");
$stmt->execute();

$data['success'] = true;
$data['message'] = 'Success!';


echo json_encode($data);

mysqli_close($conn);

感谢有关我哪里出错以及我需要如何解释此错误消息的任何指导。

干杯

标签: phpmysql

解决方案


您可以使用准备好的语句,这样您就不需要转换日期,而且它更安全,因为它可以防止 SQL 注入,所以这里是更改的代码


include(dirname(__DIR__).'/php/dbConnection.php');

ini_set('display_errors', 'On');
error_reporting(E_ALL);

//values passed from ajax
// $id         = $_POST['staffID'];
// $fromDate   = $_POST['startDate'];
// $endDate    = $_POST['endDate'];

//for testing > This Fails
$id         = '22';
$fromDate   = '10-06-2020'
$endDate    = '12-06-2020'

//for testing > This Fails
//$id         = '22';
//$fromDate   = '2020-06-30';
//$endDate    = '2020-07-30';

$data       = array();      // array to pass back data

$stmt = $conn->prepare("INSERT INTO vacation (id, from_date, to_date)
                        VALUES (?, ?, ?)");
$stmt->bind_param("sss", $id, $fromDate, $endDate);

$stmt->execute();

$data['success'] = true;
$data['message'] = 'Success!';


echo json_encode($data);

$stmt->close();
$conn->close();



推荐阅读