Php 将datetime字符串插入MySQL将导致0000-00-00

Php 将datetime字符串插入MySQL将导致0000-00-00,php,mysql,api,Php,Mysql,Api,我正在尝试从API向我的数据库添加作业信息 我的一个提要提供了一个日期(已发布)和一个过期日期 我正在尝试插入这两个字段(以及其他字段) 输入的日期很好,但到期日期设置为默认0000-00-00:00:00 api中的示例数据: { "jobId":30081256, "expirationDate":"22/08/2016", "date":"11/07/2016" } 我按如下方式分析准备输入的日期: $job_date = $job->date; $ti

我正在尝试从API向我的数据库添加作业信息

我的一个提要提供了一个日期(已发布)和一个过期日期

我正在尝试插入这两个字段(以及其他字段)

输入的日期很好,但到期日期设置为默认0000-00-00:00:00

api中的示例数据:

{  
    "jobId":30081256,
    "expirationDate":"22/08/2016",
    "date":"11/07/2016"
}
我按如下方式分析准备输入的日期:

$job_date = $job->date;
$timestamp = strtotime(str_replace('/', '-', $job_date));
$date = date("Y-m-d H:i:s", $timestamp);

//expiry
$job_expiry = $job->expirationDate;
$expiry_timestamp = strtotime(str_replace('/', '-', $job_expiry));
$expiry_date = date("Y-m-d H:i:s", $expiry_timestamp);
当我回显$date和$expiration\u date的结果时,我得到:

2016-07-11 00:00:00

在我看来,一切都很好,日期的格式与sql所期望的一样,但到期日期没有设置

我不确定它是否与我的查询有关(缩短以显示有问题的字段-所有其他字段插入正确):

也许是重复部分?作业可能已经在我的数据库中,但有时它已被刷新/更新,并且发布日期或到期日可能不同,因此我希望使用API中的最新值对其进行更新

这是怎么回事

表结构(按要求):

CREATE TABLE `jobs2` (
      `date` datetime NOT NULL,
       `title` varchar(200) COLLATE latin1_general_ci NOT NULL,
       `company` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `email` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `url` varchar(1200) COLLATE latin1_general_ci NOT NULL,
       `salarymin` int(20) DEFAULT NULL,
       `salarymax` int(20) DEFAULT NULL,
       `benefits` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `salary` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
       `jobtype` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `full_part` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `salary_per` varchar(20) COLLATE latin1_general_ci DEFAULT NULL,
       `location` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
       `country` varchar(30) COLLATE latin1_general_ci NOT NULL,
       `description` varchar(3000) COLLATE latin1_general_ci NOT NULL,
       `category` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
       `image` varchar(150) COLLATE latin1_general_ci NOT NULL,
       `latitude` float NOT NULL,
       `longitude` float NOT NULL,
       `town` varchar(50) COLLATE latin1_general_ci NOT NULL,
       `county` varchar(50) COLLATE latin1_general_ci NOT NULL,
       `location_id` varchar(255) COLLATE latin1_general_ci NOT NULL,
       `jobref` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `partner` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `company_id` int(20) DEFAULT NULL,
       `featured` varchar(10) COLLATE latin1_general_ci DEFAULT NULL,
       `solr_stored` int(1) DEFAULT NULL,
       `expiry` datetime NOT NULL,
       UNIQUE KEY `location_id` (`location_id`),
       KEY `partner` (`partner`),
       KEY `company` (`company`),
       KEY `title` (`title`),
       KEY `company` (`company`),
       KEY `longitude` (`longitude`),
       KEY `latitude` (`latitude`),
       KEY `jobref` (`jobref`),
       KEY `jobtype` (`jobtype`),
       KEY `company_id` (`company_id`),
       KEY `salarymin` (`salarymin`),
       KEY `salarymax` (`salarymax`),
       KEY `salary_per` (`salary_per`),
       KEY `date` (`date`),
       FULLTEXT KEY `title` (`title`),
       FULLTEXT KEY `company` (`company`),
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci

您能否发布
SHOW CREATE TABLE jobs2的结果?@Galz更新了question@rpsep2-嗯,这没什么意义。您有多个没有默认值的非空列,因此插入查询根本无法成功运行。如果不指定
标题
公司
电子邮件
等,则无法插入仅包含
作业参考号
日期
到期日
的记录。我强烈建议使用准备好的语句在查询中设置参数。它为您省去了在转义和引用方面的麻烦,还防止了mysql注入。看到了,但是当你只显示缩短版本时,我们看不到这个问题。你能发布
show CREATE TABLE jobs2的结果吗?@Galz更新了question@rpsep2-嗯,这没什么意义。您有多个没有默认值的非空列,因此插入查询根本无法成功运行。如果不指定
标题
公司
电子邮件
等,则无法插入仅包含
作业参考号
日期
到期日
的记录。我强烈建议使用准备好的语句在查询中设置参数。它为您省去了在转义和引用方面的麻烦,还防止了mysql注入。看到了吗?但当您仅显示缩短版本时,我们看不到该问题。
"INSERT INTO 
jobs2 (jobref, date, expiry)
VALUES ('"
.$jobref
."','"
.$date
."','"
.$expiry_date
."') ON DUPLICATE KEY UPDATE
`date` = VALUES(date),
`expiry` = VALUES(expiry)"
CREATE TABLE `jobs2` (
      `date` datetime NOT NULL,
       `title` varchar(200) COLLATE latin1_general_ci NOT NULL,
       `company` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `email` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `url` varchar(1200) COLLATE latin1_general_ci NOT NULL,
       `salarymin` int(20) DEFAULT NULL,
       `salarymax` int(20) DEFAULT NULL,
       `benefits` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `salary` varchar(200) COLLATE latin1_general_ci DEFAULT NULL,
       `jobtype` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `full_part` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `salary_per` varchar(20) COLLATE latin1_general_ci DEFAULT NULL,
       `location` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
       `country` varchar(30) COLLATE latin1_general_ci NOT NULL,
       `description` varchar(3000) COLLATE latin1_general_ci NOT NULL,
       `category` varchar(100) COLLATE latin1_general_ci DEFAULT NULL,
       `image` varchar(150) COLLATE latin1_general_ci NOT NULL,
       `latitude` float NOT NULL,
       `longitude` float NOT NULL,
       `town` varchar(50) COLLATE latin1_general_ci NOT NULL,
       `county` varchar(50) COLLATE latin1_general_ci NOT NULL,
       `location_id` varchar(255) COLLATE latin1_general_ci NOT NULL,
       `jobref` varchar(100) COLLATE latin1_general_ci NOT NULL,
       `partner` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
       `company_id` int(20) DEFAULT NULL,
       `featured` varchar(10) COLLATE latin1_general_ci DEFAULT NULL,
       `solr_stored` int(1) DEFAULT NULL,
       `expiry` datetime NOT NULL,
       UNIQUE KEY `location_id` (`location_id`),
       KEY `partner` (`partner`),
       KEY `company` (`company`),
       KEY `title` (`title`),
       KEY `company` (`company`),
       KEY `longitude` (`longitude`),
       KEY `latitude` (`latitude`),
       KEY `jobref` (`jobref`),
       KEY `jobtype` (`jobtype`),
       KEY `company_id` (`company_id`),
       KEY `salarymin` (`salarymin`),
       KEY `salarymax` (`salarymax`),
       KEY `salary_per` (`salary_per`),
       KEY `date` (`date`),
       FULLTEXT KEY `title` (`title`),
       FULLTEXT KEY `company` (`company`),
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci