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')");
我没有看到这样的一个问题,所以如果你知道的一个让我知道。
说你得到什么错误(或者没有错误),将极大地帮助诊断这个问题。内容只是在数据库中“切断”了吗?或者是MySQL将错误返回给PHP?但是,这里有一些想法...
mysql_real_escape_string()是一个很好的开始。任何带有单个撇号的输入都会破坏您的代码。阅读有关清理SQL用户输入的信息,网络上有大量资源。这绝对不是可选的。还要研究参数化的查询/准备语句,或者那里的许多ORM库/框架之一。
如果您在长时间输入时遇到问题,那么您的“文本”列也可能不足以容纳这些输入。 VARCHAR(X)只能容纳X个字符。改用类似MEDIUMTEXT的东西。
使用POST而不是GET; GET限制了通过URL发送的值的大小。在发送创建/更改数据的请求时,POST是传统方法。
如果没有更多信息,您很难说出问题所在。
我相信我找到了解决方案!我改为MEDIUMTEXT,我也使用了mysql_real_escape(),它工作。客户端的虚拟主机没有命令行访问权限,因为他们使用的是较低等级的软件包,所以我坚持使用phpmyadmin,并且据我所知无法更改max_allowed_packet。 – 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)
不,没有限制(不完全),但显示代码的_rest_。你插入它们之前是否逃避了这些变量?如果不是,他们中的一个可能会打破查询,特别是如果它是多个段落,它将包含一个'''。 'echo mysql_error();' – 2012-07-12 19:40:52
查看表的数据库模式也有帮助。 – andrewsi 2012-07-12 19:41:40
你是否直接从用户输入中传递变量?在一些描述中有可能存在撇号('''),这些撇号会干扰更新。 – 2012-07-12 19:43:23