2013-04-08 27 views
1

我試圖在我的數據庫中更新日期字段。這樣的查詢:更新時爲空日期字段 - MySQL PHP

$q = "update news set data = STR_TO_DATE('2011-03-05','%Y-%m-%d'), title = '".$title."', content='".$content."',...."; 

的偉大工程,但:

$q = "update news set data = STR_TO_DATE('".$data."','%Y-%m-%d'), title = '".$title."', content='"..."; 

它不工作:(

我日期:

$data = $_POST["data"]; 

,它有一個值「 2013-04-13「我修改了日期並顯示在彈出窗口中,值正確; plz幫助:)

UPDATE 奇怪的是我,但如果我使用:

$q = "insert into news set data = CAST('".$data."' AS DATE), title = '".$title."', content='".$content."'..."; 

它完美的罰款。只有在插入不更新

腳本爲表:

CREATE TABLE IF NOT EXISTS `news` (`id` int(11) NOT NULL AUTO_INCREMENT, `data` date NOT NULL, `title` text NOT NULL, `content` text NOT NULL, `img` text NOT NULL, `n_img` text NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ; 
+0

你最好做PHP'的var_dump()'您'$ _ POST [ '數據']' - 而不是一個彈出窗口(?我想這是JavaScript的'警報()'),它可以顯示一些變量中的「棘手」符號。 – barbashov 2013-04-08 22:10:32

+0

我會說,做'var_dump($ q);'兩次並比較。 – michi 2013-04-08 22:13:39

+0

你應該首先逃避帖子數據。也許有一個在這裏閱讀:http://php.net/manual/en/security.database.sql-injection.php – 2013-04-08 22:17:50

回答

1

爲什麼您使用STR_TO_DATE?看起來你的日期已經是正確的格式。嘗試刪除它,只是插入原樣?

可能想首先逃避它。

$data = mysql_real_escape_string($_POST["data"]); 
+0

'mysql_real_escape_string'沒有幫助。我正在使用'STR_TO_DATE',因爲我嘗試了很多選項,並且'STR_TO_DATE'開始使用phpMyAdmin – 2013-04-09 05:41:35

+0

@MarcinSzubert no,'mysql_real_escape_string'不會解決您的問題,它只是保護您的網站免受sql注入攻擊。您的表結構可能存在問題,PHP看起來很好。你可以導出表格並將其發佈在你的問題中? – 2013-04-09 06:07:30

+0

完成。感謝您的承諾 – 2013-04-09 06:19:20