我有一个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”格式的日期?谢谢。我感谢任何帮助。
答案 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);
旁注:考虑切换为PDO或MySQLi并使用prepared statements。
答案 2 :(得分:0)
试试这个...这会将它重新转换为日期,然后保存..
$dt = strtotime($row['my_date']);
$date = date("Y-m-d",$dt);
$sql = "INSERT INTO temp_table (my_date) VALUES ({$date})";