2016-09-29 110 views
2

我正在寫新聞並將其插入到我的數據庫中,我已經建立了3年前的代碼,它運行良好,但我不能再插入,我不明白爲什麼:php Mysql插入:不能再插入

$insert=mysqli_query($co,"INSERT INTO articles VALUES('','".addslashes(htmlentities($_POST['title']))."','".time()."','".nl2br(addslashes(htmlentities($_POST['msg'])))."')") or die("insert error: ".mysqli_error()); 

所在的表的文章得到結構(ID:INT(11)AUTO_INCREMENT,標題:文本,日期:INT(11),味精:文本)

當我嘗試它我落在「插入錯誤」的消息,但mysqli_error()消息是空的,所以我嘗試了一個僞造的條目在phpmyadmin上:

INSERT INTO articles VALUES('','testset','1396642210','FUUUUUU') 

我得到了#1366 - 不正確的整數值:''列1'的列'id' (但id是自動遞增的? :/)

(連接和數據庫選擇都OK) 我真的不明白髮生了什麼,我正在處理這個請求2/3年,它正在工作... 任何想法?

+0

'和addslashes(ヶ輛($ _ POST [」標題']))'=>使用準備好的語句。他們會更安全。 – Xenos

+0

刪除'1396642210'周圍的引號,假設該列是整數類型。也許你已經升級了MySQL,並且它的語法實施已經改變了(它肯定適用於'GROUP BY')。 –

+0

您最近是否改變了可能影響此設置的任何內容? MySQL版本? PHP版本? Webserver版本?網絡服務器?多次做同樣的事情永遠不會產生不同的結果,所以必須改變。 – apokryfos

回答

4

您已轉移到MySQL 5.7,它具有新的安全性和數據完整性檢查:INT列不能再將STRING值保存爲''

使用DEFAULT的價值,或者只是不中你INSERT添加列:

INSERT INTO articles (title, date, msg) VALUES (?, ?, ?); 

INSERT INTO articles VALUES (DEFAULT, ?, ?, ?); 

這是如果列順序變化不太安全。

+0

謝謝,這是真的我沒有遵循版本更改,與DEFAULT合作,謝謝:) – Vertus

+0

歡迎。請考慮接受答案。 – Xenos

0

最好不要將整數值放在引號中,這可能適用於您的timestamp列。

至於自動遞增列,就像你id,你可以留下你的查詢,並添加要填寫您的查詢中的列:

INSERT INTO `articles` (`title`, `timestamp`, `msg`) VALUES ('testeset', 1396642210, 'FUUUUUU');