我正在使用jQuery的表单中的数据形式写入数据库json_encode
.
但是,来自数据库的数据将会损坏.
$db->query("SET NAMES utf8");
$kelime = array("Merhaba","Dünya");
$bilgi = json_encode($kelime);
$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '".$bilgi."'
";
$db->query($incelemeEkle);
Run Code Online (Sandbox Code Playgroud)
数据库表模式;
CREATE TABLE `incelemeRapor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`bigData` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
MySQL插入示例数据;
["Merhaba","Du00fcnya"]
Run Code Online (Sandbox Code Playgroud)
Arn*_*anc 26
在将数据放入SQL查询之前始终转义数据:
$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '".mysql_real_escape_string($bilgi)."'
";
Run Code Online (Sandbox Code Playgroud)
(加mysql_real_escape_string()
电话)
json_encode()
使用\u<code-point>
符号编码非ascii字符; 所以json_encode(array("Merhaba","Dünya"));
回归["Merhaba","D\u00fcnya"]
.
然后,此字符串嵌入在SQL查询中:
INSERT INTO incelemeRapor SET
bigData = '["Merhaba","D\u00fcnya"]'
Run Code Online (Sandbox Code Playgroud)
转义序列没有特殊含义\u
,所以MySQL只删除了\
; 这导致["Merhaba","Du00fcnya"]
存储在数据库中.
因此,如果您转义字符串,查询将变为:
$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '["Merhaba","D\\u00fcnya"]'
";
Run Code Online (Sandbox Code Playgroud)
并["Merhaba","D\u00fcnya"]
存储在数据库中.