如何使用mysql insert 插入特殊字符?
Posted
技术标签:
【中文标题】如何使用mysql insert 插入特殊字符?【英文标题】:How insert special characters using mysql insert? 【发布时间】:2019-11-10 18:43:21 【问题描述】:我是 mysql 新手,我有一个酒店的 XML 文件,其中包括酒店代码和酒店描述。如下所示的xml文件
<hotels>
<hotel>
<hotelcode>1</hotelcode>
<description>San cassiano residenzia D’epocaVenice’s Grand Canal.Overview Situated overlooking Venice’s Grand Canal, San Cassiano Residenzia D’Epoca is a historic hotel with plenty of charm</description>
</hotel>
<hotel>
<hotelcode>2</hotelcode>
<description>San cassiano residenzia D’epocaVenice’s Grand Canal.Overview Situated overlooking Venice’s Grand Canal, San Cassiano Residenzia D’Epoca is a historic hotel with plenty of charm</description>
</hotel>
<hotel>
<hotelcode>3</hotelcode>
<description>San cassiano residenzia D’epocaVenice’s Grand Canal.Overview Situated overlooking Venice’s Grand Canal, San Cassiano Residenzia D’Epoca is a historic hotel with plenty of charm</description>
</hotel>
<hotels>
我也使用下面的 sql 查询将 xml 数据插入数据库
$conn_1->query("LOAD DATA LOCAL INFILE '".$rs_file_path."'
INTO TABLE hotels
CHARACTER SET utf8
LINES STARTING BY '<hotel>' TERMINATED BY '</hotel>'
(@tmp)
SET
hotelcode = ExtractValue(@tmp, 'hotelcode'),
description= ExtractValue(@tmp, 'description')
;");
但是这里的数据没有插入到酒店表中。因为描述中包含一些特殊字符,如',""等。
有什么办法像mysqli_real_escape_string
更新: “但现在我发现引号在 xml 中有两种类型,如下图所示”
如何替换第二种引号?
请检查附件。
<hotels>
<hotel>
<hotelcode>1</hotelcode>
<description>Located near S'Arenal Venice’s yacht club</description>
</hotel>
<hotel>
<hotelcode>2</hotelcode>
<description>Located near S'Arenal Venice’s yacht club</description>
</hotel>
<hotel>
<hotelcode>3</hotelcode>
<description>Located near S'Arenal Venice’s yacht club</description>
</hotel>
</hotels>
【问题讨论】:
您是否考虑过使用 LOAD XML 而不是 LOAD DATA?老实说,我没有任何经验,但它似乎对 XML 更有效。 ***.com/questions/23932102/… 我更新问题 您仍然没有使用LOAD XML
,这使得使用您的平面 XML 导入非常容易。
【参考方案1】:
第二个引号字符是右单引号(&rsquo;
&#8217;
U+2019
)。
如果使用 XSLT,您可以使用 translate()
函数替换它,例如:
<xsl:value-of select='translate(description, "’", "'")'/>
【讨论】:
【参考方案2】:试试这个
$content = file($rs_file_path);
$filedata = str_replace("'", "\'", $content);
$filedata = str_replace('"', '\"', $content);
$conn_1->query("LOAD DATA LOCAL INFILE '".$rs_file_path."'
INTO TABLE hotels
CHARACTER SET utf8
LINES STARTING BY '<hotel>' TERMINATED BY '</hotel>'
(@tmp)
SET
hotelcode = ExtractValue(@tmp, 'hotelcode'),
description= ExtractValue(@tmp, 'description')
;");
它将打开您的文件并在单引号和双引号处添加斜杠。
当您检索表数据时使用这样来防止打印斜线
echo stripslashes($str);
【讨论】:
感谢您的重播,但我更新了问题以上是关于如何使用mysql insert 插入特殊字符?的主要内容,如果未能解决你的问题,请参考以下文章
SQLSERVER 插入 INSERT INTO 特殊字符过滤
插入数据时有特殊字符&且后面有字符被误认为变量名(insert时提示:输入值于***)
mysql之workbench如何只导出(insert语句)数据
SQL2000.特殊insert.要插入包含单引号与逗号的值.请高手解答!