php - 如何在MySQL中对json数据进行编码以供数据库存储?

标签 php javascript mysql ajax json

我有一个 javascript 丰富的页面,它将一个大型 JSON 格式传递给 php 以放入 MySQL 数据库中。 JSON 中的数据包括用户提交的字符串,并将包括包含基本 html 的字符串( <a><strong> 等)。

我遇到的问题是当字符串包含 ' 时引号被转义,我无法去掉斜杠,导致复合转义,如

<a href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'example.com\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'></a>

每次用户保存时,情况都会变得复杂,数据库字段严重膨胀。

我将数据插入 MySQL 的字符串转换是:

$correspondenceArray = base64_encode(json_encode($_POST['saveArray']['correspondenceObject']));

获取数据的方法是:

function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

$correspondenceJSON = stripslashes_deep(json_decode(base64_decode($resultArray['correspondence_array']), true));

根据我所做的,我的目的是去掉数据库中数据上的斜杠,以便 JavaScript 具有未转义的数据

编辑

我意识到json_encode($a,JSON_HEX_QUOT)可能会有所帮助,但我运行的服务器有 PHP 5.2.16,因此该功能不可用)

最佳答案

不要对 SQL 使用字符串生成。

如果使用占位符,将没有问题(存储)并且不需要魔法转义。只需将其存储为 VARCHAR 类型即可。完成了,完成了。

输出(输入期间)的清理同样应该使用适当的库来完成 - 有两种不同的操作;但是,这是一个与存储不同的问题。

编辑

参见PDO作为一个准备好的语句(读:占位符)实现。其他可能存在(我不使用 PHP,但我觉得有义务纠正与手动构建的基于字符串的 SQL 查询相关的永久设计错误。)

The parameters to prepared statements don't need to be quoted; the driver automatically handles this. If an application exclusively uses prepared statements, the developer can be sure that no SQL injection will occur (however, if other portions of the query are being built up with unescaped input, SQL injection is still possible).

听起来好得令人难以置信。现在退出使用字符串生成的语句。请。

祝你编码愉快。

关于php - 如何在MySQL中对json数据进行编码以供数据库存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084745/

相关文章:

javascript - 所有图像都在 jQuery 中加载?

javascript - Node : Wait for all foreach with Promises to finish but never actually finishes

PHP Mysql 特殊字符问题。记录没有插入到mysql表中

mysql - NodeJS 应用程序 (Express) 中的 Google Cloud SQL 连接 --> 错误 : connect ENOENT

PHP 准备的 postgres 查询失败,返回 :"could not determine data type of parameter $1"

php - 当左连接列不存在时如何选择总和

javascript - 为什么我的 JavaScript float 被分割?

php - 从 msqli::multi_query 取回行时遇到问题

php - CSS 不适用于 DOMPDF

mysql - 表连接 - 如果一个表没有对应的记录,则返回所有记录