0

我正在执行这个查询:

插入到 sent_emails (mailBody,azRatesFilesSendingId,fileName,tarrif_id,destination,cc,bcc,email_content,attached_file) VALUES ('尊敬的先生,

 

请查看随附的 TELTAC WORLDWIDE 费率通知。


经客户经理批准,即日起增效。

 

请确认您的收据至 ra@teltacworldwide.com

 

问候,


===================================差饷署

Teltac World Wide Inc.

Ibisa Bldg, 3rd Floor, Racreet, Verdun

邮政信箱:43 间卧室

电话:+9632 分机:114

F338

电子邮件: 鼠尾草

====================================

' , '33435','Teltac-Rate Sheet-ATel 2013-Apr-19','276','ratcation.com','ratrldwide.com','','View','Open')

当有人试图执行它时,它给了我一个语法错误:

DBHandler 中的错误---executeUpdateQuery-->com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'MsoNormal" style="margin: 0in 0in 0pt;">尊敬的先生附近使用的正确语法

但是当我在 MySql 服务器中执行它时,该语句成功执行并返回一行已生效!所以我可以看到这不是语法错误,但我无法弄清楚问题所在!

4

3 回答 3

0

我使用了 apache .jar 中的 StringEscapeUtils,它就像一个魅力!我读到它不安全,因为它可能会带来 SQL 注入问题,但是由于此应用程序仅在内部使用,因此我认为它是安全的!

于 2013-04-20T07:27:47.737 回答
0

这似乎是String连接和查询构建的问题。如果没有实际的代码,这只是一个猜测,但它是有根据的。

String使用内容向数据库中插入任意 s时,这是一个非常常见的问题String。例如

final String query = "SELECT * FROM my_table WHERE value = '" + value + "'";

上面的查询看起来不错,它做了它应该做的事情。但万一value出乎意料呢?

final String value = "damn, it's got an apostrophe";

现在突然你有一个损坏的查询。更糟糕的是,如果我们有

final String value = "something'; DROP DATABASE myDatabase --";

然后我们有一个真正的问题。

您应该使用 aPreparedStatement来执行查询,否则您可能会遇到各种奇怪的问题,通常称为 SQL 注入。

这是一个使用您的查询和语法的示例,它在sSET中效果更好。PreparedStatement

final String query = "INSERT INTO sent_emails SET"
        + "mailBody = ?,"
        + "azRatesFilesSendingId = ?,"
        + "fileName = ?,"
        + "tarrif_id = ?,"
        + "destination = ?,"
        + "cc = ?,"
        + "bcc = ?,"
        + "email_content = ?,"
        + "attached_file = ?";
final PreparedStatement preparedStatement = conn.prepareStatement(query);
preparedStatement.setString(1, mailBody);
preparedStatement.setInt(2, azRatesFilesSendingId);
//and the rest of the parameters.
于 2013-04-19T10:04:49.860 回答
0

问题是格式。

您的邮件正文中可能有带有样式信息的 HTML 代码,其中还包含“'”。

在将文本插入数据库之前,您应该确保转义所有单括号和双括号。

于 2013-04-19T10:05:33.173 回答