将日期值插入MySQL

时间:2011-04-04 14:32:45

标签: php mysql sql insert

我目前有一个格式为m / d / y格式的表单 - 然后我尝试将其插入表中,但表中的值为0000-00-00。据我所知,由于插入日期的格式,未插入该值。

问题是,我不确定如何更改格式,以便以MySQL将存储的格式插入。

以下是将数据插入表中的函数:

public function addUser($array) {
  $array['password'] = $this->hashPassword($array['password']);
  $implodeArray = '"'.implode( '","', $array ).'"';
  $sql = ('INSERT INTO user
              (email, password, firstName, lastName, officeID, departmentID, managerID, roleID, username, contractType, startDate, endDate, totalLeaveEntitlement, remainingLeave) 
           VALUES 
              ('.$implodeArray.')');
  echo $sql;
  die();
  mysql_query($sql,$this->_db) or die(mysql_error());
  mysql_close();
}

由于使用了implodeArray,我无法格式化startDate和endDate的值以匹配MySQL DATE格式。

6 个答案:

答案 0 :(得分:3)

为什么不在密码时使用类似的方法?因此,您只需添加另一个函数即可将日期输入转换为mysql日期格式:

public function addUser($array) {
    $array['password'] = $this->hashPassword($array['password']);

    $array['startDate'] = $this->mysql_date_format($array['startDate']);
    $array['endDate'] = $this->mysql_date_format($array['endDate']);

    $implodeArray = '"'.implode( '","', $array ).'"';
    $sql = ('INSERT INTO user (email, password, firstName, lastName, officeID, departmentID, managerID, roleID, username, contractType, startDate, endDate, totalLeaveEntitlement, remainingLeave) VALUES ('.$implodeArray.')');
    echo $sql;
    die();
    mysql_query($sql,$this->_db) or die(mysql_error());
    mysql_close();
}

答案 1 :(得分:1)

Hmmmmm

我知道这样的查询更容易编写(一个函数会生成所有参数等)但我会强烈建议您准备语句 - 有人来支持您的代码会感谢你的。

这样你可以使用NOW(),DATE_DIFF和其他令人敬畏的......

我知道这不能解答您的问题,但我确实认为您应该花时间正确构建查询 - 帮助防止运行时错误/攻击等等。

答案 2 :(得分:0)

不确定您的问题的具体细节,但总的来说:

$mysql_formatted_date = date("Y-m-d", strtotime($mdy_formatted_date));

答案 3 :(得分:0)

我想你会想要STR_TO_DATE()

STR_TO_DATE("%m/%d/%Y")我认为格式正确

答案 4 :(得分:0)

虽然数组和mysql列都有隐式顺序,但你怎么知道它们是相同的?

如果您提供'echo $ sql'的输出而不是所有的PHP代码,那将会更有用 - 虽然后者突出了很多混乱的编程,并非最不重要:

  • 字段顺序问题
  • 引用非数字值
  • 没有正确逃离字段
  • 没有陷阱/处理错误
  • 没有评论
  

采用格式为m / d / y的日期的表格 - 然后我尝试插入

在日期字段的情况下,引用是可选的,具体取决于文字使用的格式 - 但是{8}根据ISO 8601 - 即大端

答案 5 :(得分:0)

public function addUser($array) {
  list($d,$m,$y) = explode("/",$array['startDate']);
  $array['startDate'] = "$y-$m-$d";
  list($d,$m,$y) = explode("/",$array['endDate']);
  $array['endDate'] = "$y-$m-$d";

  $array['password'] = $this->hashPassword($array['password']);

  foreach($array as $key => $value){
    $array[$key] = mysql_real_escape_string($value);
  }
  $implodeArray = implode("','", $array);
  $sql = "INSERT INTO user VALUES (NULL,'$implodeArray')";
  echo $sql;
  die();
  mysql_query($sql,$this->_db) or trigger_error(mysql_error());
}