0

我有一个 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 将其识别为“Ymd”格式的日期?谢谢。我很感激任何帮助。

4

3 回答 3

2

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

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

否则,该语句可能类似于:

 ... VALUES (2013-08-22)

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

于 2013-08-23T03:05:14.833 回答
1

您的直接问题是您没有在插入语句中使用日期值周围的引号。

改变

$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并使用 准备好的语句

于 2013-08-23T03:05:08.700 回答
0

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

    $dt = strtotime($row['my_date']);
    $date = date("Y-m-d",$dt);
    $sql = "INSERT INTO temp_table (my_date) VALUES ({$date})";
于 2013-08-23T03:05:55.770 回答