2012-12-01 35 views
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://[email protected]'>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)富文本编辑器和按钮上单击事件执行INSERT语句。

你能帮忙吗?

谢谢

回答

1

因为一个单引号用于指示一个字符串的开始和结束,你需要逃避它。简短的答案是使用两个单引号 - '' - 以便SQL数据库将值存储为'。

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

看看使用REPLACE消毒传入值:

你想检查'''',如果它们存在于'''''字符串中以替换它们,以便逃离唯一的单引号。

1

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

这就是错误试图说出的内容:它解释了链接/文章的内容,并将它们作为SQL的一部分 - 这在语法上变得不正确。不要试图手动转义值socialButtonarticleText.Text。使用命名参数来代替:

insert into myArticleTable (articleText) values (?) 

而且像这样的东西填充此参数:

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

记住,永远不要通过连接字符串手动生成SQL。而且,命名参数更清晰。

声明:我不是.NET开发人员,复制代码片段How to parameterize complex OleDB queries?how to update a table using oledb parameters?但是几乎所有语言都适用相同的规则。