2012-07-12 102 views
1

不知道該怎麼說這個,但我的問題是我的字段不會正確更新。我有一個頁面設置用戶可以更新像工作列表,事件等事情。問題是,一些描述是3段或更長的段落,當表單處理時,它不正確地更新數據庫。這也發生在用戶製作新物品時。MySQL更新單個字段中的多個段落

一次可以加載多少文本是否有限制?

這裏是更新,我使用的代碼:

mysql_query("UPDATE tbl_workers_club SET eventdate='".$newDate."', theme='".$theme."', text='".$text."', contactperson='".$contactperson."', contactphone='".$phone."', dateentered='".$dateentered."' WHERE specialID='".$id."' "); 

這裏是新項目的代碼:

mysql_query("INSERT INTO tbl_workers_club (eventdate, theme, text, contactperson, contactphone, dateentered) 
VALUES ('$newDate', '$theme', '$text', '$contactperson', '$contactphone', '$dateentered')"); 

我沒有看到這樣的一個問題,所以如果你知道的一個讓我知道。

+1

不,沒有限制(不完全),但顯示代碼的_rest_。你插入它們之前是否逃避了這些變量?如果不是,他們中的一個可能會打破查詢,特別是如果它是多個段落,它將包含一個'''。 'echo mysql_error();' – 2012-07-12 19:40:52

+0

查看錶的數據庫模式也有幫助。 – andrewsi 2012-07-12 19:41:40

+0

你是否直接從用戶輸入中傳遞變量?在一些描述中有可能存在撇號('''),這些撇號會干擾更新。 – 2012-07-12 19:43:23

回答

1

說你得到什麼錯誤(或者沒有錯誤),將極大地幫助診斷這個問題。內容只是在數據庫中「切斷」了嗎?或者是MySQL將錯誤返回給PHP?但是,這裏有一些想法...

mysql_real_escape_string()是一個很好的開始。任何帶有單個撇號的輸入都會破壞您的代碼。閱讀有關清理SQL用戶輸入的信息,網絡上有大量資源。這絕對不是可選的。還要研究參數化的查詢/準備語句,或者那裏的許多ORM庫/框架之一。

如果您在長時間輸入時遇到問題,那麼您的「文本」列也可能不足以容納這些輸入。 VARCHAR(X)只能容納X個字符。改用類似MEDIUMTEXT的東西。

使用POST而不是GET; GET限制了通過URL發送的值的大小。在發送創建/更改數據的請求時,POST是傳統方法。

如果沒有更多信息,您很難說出問題所在。

+0

我相信我找到了解決方案!我改爲MEDIUMTEXT,我也使用了mysql_real_escape(),它工作。客戶端的虛擬主機沒有命令行訪問權限,因爲他們使用的是較低等級的軟件包,所以我堅持使用phpmyadmin,並且據我所知無法更改max_allowed_pa​​cket。 – 2012-07-12 20:47:20

1

看看到MySQL max_allowed_packet的設置A communication packet is a single SQL statement sent to the MySQL server, a single row that is sent to the client, or a binary log event sent from a master replication server to a slave.

mysql> select * from information_schema.global_variables where variable_name like 'max_allow%'; 
+--------------------+----------------+ 
| VARIABLE_NAME  | VARIABLE_VALUE | 
+--------------------+----------------+ 
| MAX_ALLOWED_PACKET | 1048576  | 
+--------------------+----------------+ 
1 row in set (0.00 sec)