MySQL查询错误处理日期字段

时间:2013-08-23 02:56:45

标签: php mysql date

我有一个PHP / MySQL脚本在日期字段上产生奇怪的结果。在整个过程中,我的日期很好,直到最后。最终结果将日期字段中的每个条目都设置为“0000-00-00”。我完全陷入困境,不知道还能做什么。我可以说这是一个问题,PHP没有将此解释为日期,但我不知道如何解决它。这是我的代码:

$sql = "CREATE TABLE temp_workouts (my_date date, sg_id int(11), loc_id int(11))";
$result = mysql_query($sql);
if (!$result) {
    $tag_success = "failure";
    $tag_message = mysql_error();
    echo encodeJSON($tag_success, $tag_message);
    die();
}

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $my_date = $row['my_date'];
    echo $my_date . " ";   //<--this output looks perfect
    $sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";
    $result2 = mysql_query($sql);
}
die();  

当我翻到MyPHPAdmin并查看表格时,整个列my_date包含'0000-00-00'。如何让PHP将其识别为“Y-m-d”格式的日期?谢谢。我感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我怀疑问题是你没有用单引号括起字符串文字:

 INSERT INTO temp_table (my_date) VALUES ('$my_date')
                                          ^---     ^--- string literals in single quotes

否则,该陈述可能类似于:

 ... VALUES (2013-08-22)

MySQL没有将其转换为有效日期,发出警告消息并插入“零”日期。

答案 1 :(得分:1)

您当前的问题是您不会在insert语句中使用日期值附近的引号。

更改

$sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";

$sql = "INSERT INTO temp_table (my_date) VALUES ('$my_date')";
                                                 ^        ^

现在,您可以使用INSERT ... SELECT语法一次性实现目标

INSERT INTO temp_table (my_date)
SELECT my_date
  FROM my_table

因此这部分代码

$sql = "SELECT * FROM my_table";
$result = mysql_query($sql);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $my_date = $row['my_date'];
    echo $my_date . " ";   //<--this output looks perfect
    $sql = "INSERT INTO temp_table (my_date) VALUES ($my_date)";
    $result2 = mysql_query($sql);
}

可以更改为

$sql = "INSERT INTO temp_table (my_date)
        SELECT my_date FROM my_table";
$result2 = mysql_query($sql);

旁注:考虑切换为PDOMySQLi并使用prepared statements

答案 2 :(得分:0)

试试这个...这会将它重新转换为日期,然后保存..

    $dt = strtotime($row['my_date']);
    $date = date("Y-m-d",$dt);
    $sql = "INSERT INTO temp_table (my_date) VALUES ({$date})";