2017-01-02 124 views
0

我試圖向我的一個表添加記錄。根據輸入的信息,其中一列應填寫未來日期,有時一個月,有時一年。動態CURDATE和INSERT INTO的問題

我正在使用CURDATE()+ INTERVAL 1個月/年來獲取未來日期。

但是,添加記錄時,日期顯示爲0000-00-00。

這是我使用的代碼:

if ($_POST['type'] == "month") { 
    $expire = 'CURDATE() + INTERVAL 1 MONTH'; 
} else if ($_POST['type'] == "year") { 
    $expire = 'CURDATE() + INTERVAL 1 YEAR'; 
} 

$insertSQL = 'INSERT INTO users (dateAdded, name, email, promoEndDate) VALUES (now(), :name, :email, :expire)'; 
$rsInsert = $pdo->prepare($insertSQL); 
$rsInsert->bindParam(':name', $_POST['name'], PDO::PARAM_STR); 
$rsInsert->bindParam(':email', $_POST['email'], PDO::PARAM_STR); 
$rsInsert->bindParam(':expire', $expire, PDO::PARAM_STR); 
$rsInsert->execute(); 
我以前用過CURDATE沒有約束力,它一直

,但我需要的時間間隔取決於用戶的選擇。我也嘗試使用$ rsInsert-> bindValue(':expire',$ expire,PDO :: PARAM_STR),但我得到了相同的結果。

任何幫助,將不勝感激。

謝謝。

+3

準備好的陳述用於準備值。所以你的'CURDATE()+ INTERVAL 1 MONTH'被認爲是一個字符串,而不是mysql表達式。 –

+0

謝謝,我刪除了bindParam行並將$ expire直接添加到查詢字符串中。有效。 – cesarcarlos

+0

現在你可以回答你的問題。 –

回答

0

這可能有點不好意思,但是因爲在特定的插入語句中沒有使用任何用戶輸入的參數並不可怕。

if ($_POST['type'] == "month") { 
    $expire = 'CURDATE() + INTERVAL 1 MONTH'; 
} else if ($_POST['type'] == "year") { 
    $expire = 'CURDATE() + INTERVAL 1 YEAR'; 
} 

$insertSQL = 'INSERT INTO users (dateAdded, name, email, promoEndDate) VALUES (now(), :name, :email, '. $expire .')'; 
$rsInsert = $pdo->prepare($insertSQL); 
$rsInsert->bindParam(':name', $_POST['name'], PDO::PARAM_STR); 
$rsInsert->bindParam(':email', $_POST['email'], PDO::PARAM_STR); 
$rsInsert->execute(); 

不一定有關你的問題,但你可能要考慮消毒的變量,如果他們是從$ _ POST進來,以及包括崗位類型,默認情況下,如果沒有指定一個月或一年你將不會添加變量導致插入失敗。

+0

這就是我最終做的。謝謝! – cesarcarlos