2012-12-01 67 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?但是幾乎所有語言都適用相同的規則。