-1

我需要将包含新行的数据插入到文本列中。在进行常规插入时,我这样做的方式是... VALUES(E'Here comes a \\n new line)在查询时产生以下内容:

Here Comes a
new line

但是,当使用准备好的语句时,例如:

my $sth = $dbh->prepare("INSERT INTO foo_table (foo_id, foo_bar_id, foo_text) VALUES (?, ?, ?)");
my @data = (1, 9999, "E'Here comes a \\n new line'");
$sth->execute(@data);

插入的数据实际上是E'Here comes a \n new line'我尝试将我的值乱扔以插入各种\以查看转义字符是否是问题,但如果是,我还没有找到正确的组合。谢谢你尽你所能的帮助。

EDIT2:原来我\在使用准备好的语句时只需要一个。显然,在尝试所有更复杂的转义序列时,我忽略了最简单的解决方案。

编辑:下面的答案中提到的转义不会产生预期的结果。它Here comes a \n new line在不被查询时产生

Here comes a
new line

就像使用E'...'语法时一样

4

2 回答 2

2

您应该只需要传递值。让驱动程序处理转义。

于 2013-08-23T14:21:37.853 回答
0

E'Here comes a \\n new line'仅在嵌入到 SQL 语句中时使用。在您的情况下,只需传入

my @data = (1, 9999, "Here comes a \\n new line");

并且参数绑定机制将为您进行转义。

于 2013-08-23T14:25:00.030 回答