MySQL更新单个字段中的多个段落

问题描述:

不知道该怎么说这个,但我的问题是我的字段不会正确更新。我有一个页面设置用户可以更新像工作列表,事件等事情。问题是,一些描述是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

说你得到什么错误(或者没有错误),将极大地帮助诊断这个问题。内容只是在数据库中“切断”了吗?或者是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

看看到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)