php - Web 表单到数据库存储的端到端流程的最佳实践

标签 php mysql database

我有一个网络表单,可以捕获 <input type="text"><textarea>元素。后端技术是PHP和MySQL。

  • MySQL 数据库、表和列排序规则均为 utf8_general_ci
  • 传入的表单数据已使用 stripslashes($_POST['text_input']) 进行清理
  • INSERT INTO 查询语句类似于 SET text_storage = "mysql_real_escape_string($_POST['text_input'])"

我在数据库中看到不可读的字符,这是由于网络表单中出现的特殊字符(例如单撇号和双引号等)的变化造成的。

为了确保数据库表中的数据干净且可读,最佳编码实践是什么 - 整个过程中的每一步?我需要特定的<doctype><meta http-equiv="Content-Type" ... />以及为了捕获和存储干净的数据?

感谢您帮助我构建用于干净数据捕获和存储的最佳实践模板。

最佳答案

尝试在实际从数据库获取记录之前执行这些查询:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

然后继续执行您的查询。当然,上述查询必须在当前数据库连接的上下文中

可以使用内置 PHP 函数(如 filter_var())轻松清理输入数据。和filter_var_array() ,但是mysql_real_escape_string()也是很好的解决方案。 您的 HTML 文档必须在标签中具有正确的编码:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

mysql_real_escape_string()转义 unescaped_string 中的特殊字符,同时考虑连接的当前字符集,以便可以安全地将其放置在 mysql_query() 中。如果要插入二进制数据,则必须使用此函数。该函数调用MySQL的库函数mysql_real_escape_string ,它将反斜杠添加到以下字符前面:\x00, \n, \r, \, ', " and \x1a .

关于php - Web 表单到数据库存储的端到端流程的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465240/

相关文章:

javascript - PHP API + jQuery AJAX 调用 JSON 语法错误

php - PDO sql 查询未执行且未进一步加载 html 内容

database - Access Upsize到Sql Server不传输数据

ASP.NET 4.0 数据库创建的页面

php - Argon2id 如何在 PHP 中存储盐?

php - 如何让搜索引擎找到我的 AJAX 内容

php - 如何使用 PDO 准备语句从 MySQL 中获取有意义的错误消息?

MySQL列扁平化为字符串

PHP MySQL 日期比较

sql-server - 如何将 Excel 连接到 SQL Server 2014