0

大家好,我正在尝试动态地将社交分享按钮添加到我的文章中。我想将社交分享脚本与我的文章文本一起插入到数据库中,并使用唯一的分享链接显示它。所以我是这样编码的。这可能不是一个好主意,但我想知道这种方式是否可行。

string socialButton = "
<div id='social_nav_horizontal'>    <h3>        Bookmark or Share This Post</h3>    <ul>        <li>            <a class='delicious' href='http://del.icio.us/post?url=Your website title' title='Share this on del.icio.us'>Delicious</a></li>     <li>            <a class='facebook' href='http://www.facebook.com/sharer.php?u=http://yourwebsite.com'>Facebook</a></li>        <li>            <a class='stumbleupon' href='http://www.stumbleupon.com/submit? url=http://www.yoursite.com/'>Stumble</a></li>      <li>            <a class='twitter' href='http://twitter.com/home?status=Your Website Title- http://yourwebsite.com@TwitterUserName'>Twitter</a></li>    </ul></div><p>  &nbsp;</p>";

所以“插入 myArticleTable(articleText) 值 ('"+socialButton + articleText.Text+"')”; 但是在尝试插入时会引发异常。

System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression ''

只有当我直接将它传递到我的ckeditor (wysiwyg)富文本编辑器并在按钮单击事件上执行插入语句时,这项工作才有效。

你能帮我吗?

谢谢

4

2 回答 2

1

因为单引号用于指示字符串的开始和结束,所以需要对其进行转义。简短的回答是使用两个单引号 - '' - 以便 SQL 数据库将值存储为 '.

Ex:-
Insert into Person
(First, Last)
Values
('Joe', 'O''Brien')

看看使用 REPLACE 来清理传入的值:

您想检查 '''',如果它们存在于字符串中,则用 '''''' 替换它们,以逃避唯一的单引号。

于 2012-12-01T22:01:02.527 回答
1

您还没有意识到这一点,但是您刚刚在您的代码中发现了 SQL 注入漏洞。基本上任何可以在服务器上运行此代码的人都可以将恶意 SQL 放入您的文章中并执行。

这就是错误试图伪装的意思:它解释了您的链接/文章的内容并使它们成为 SQL 的一部分 - 这在语法上变得不正确。不要试图手动转义socialButtonarticleText.Text。改用命名参数:

insert into myArticleTable (articleText) values (?)

并使用以下内容填充此参数:

cmd.Parameters.AddWithValue("parm1", socialButton + articleText.Text);

请记住,永远不要通过连接字符串来手动生成 SQL。此外,命名参数更简洁。

免责声明:我不是 .NET 开发人员,从如何参数化复杂的 OleDB 查询中复制了代码片段?以及如何使用 oledb 参数更新表?但是几乎所有语言都适用相同的规则。

于 2012-12-01T22:02:18.830 回答