2013-08-23 62 views
0

我有一個PHP/MySQL腳本在日期字段上產生奇怪的結果。在整個過程中,我的日期一直很好,直到最後。最終結果將日期字段中的每個條目都設置爲'0000-00-00'。我完全陷入困境,不知道還有什麼要做。我可以說這是PHP不解釋這個日期的問題,但我不知道如何解決它。這裏是我的代碼:MySQL查詢錯誤處理日期字段

$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

看來你可以做'插入temp_table(my_date)(選擇MY_TABLE my_date)' ;但如果你討厭這個問題,至少可以使用mysqli/PDO來準備'insert'查詢,而不是一遍又一遍地運行查詢。 – Passerby

回答

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和使用prepared statements

+0

+1同時發現了同樣的問題。關於INSERT ... SELECT的好處。 – spencer7593

+1

@ usr55410非常歡迎。祝你好運:) – peterm

2

我懷疑的問題是,你有沒有包圍的字符串中的單引號的文字:

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

否則,該語句大概是這樣的:

... VALUES (2013-08-22) 

MySQL是沒有轉換將其轉換爲有效日期,發出警告消息,並插入「零」日期。

+0

+1你打敗了我幾秒鐘 – peterm

0

試試這個...這將它重新轉換爲日期,然後保存..

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