2012-05-07 42 views
1

那些喜歡在MySQL中造成混亂的討厭單引號似乎有堂兄弟!我們有一個系統,用戶可以通過電子郵件粘貼內容或從幾乎任何地方複製和粘貼來更新來自客戶的更新,每當我們滿足單引號時,另一個會彈出。以下是不同的:’ ´ ' ` < -正則表達式替換不同種類的單引號

由於我的正則表達式是相當薄弱的,我的同胞開發商說我應該只使用其刪除:

return Regex.Replace(oldText, @"[’´'`""]", @""); 

我不喜歡這樣,它不專業,去除所有單引號。正如許多論壇所建議的,我想要做的只是將單引號加倍。這是正確的嗎?

return Regex.Replace(oldText, @"[’´'`""]", @"''"); 

這雖然是做了,因爲在他的DAL,他構建了自己的INSERT語句用單引號:

sql.Append(",`to_complete_by`='" + obj.toCompleteBy + "'"); 

我是否能夠通過改變^^這避免這個錯誤?

sql.Append(",`to_complete_by`=\"" + obj.toCompleteBy + "\""); 

或正則表達式替換首選方法?

+7

您描述的所有方法都可以繞過。如果您不想獲得所有權,請使用準備好的陳述。 –

+1

你爲什麼不簡單地使用SqlParameters?將節省您不必更換任何東西。 – shriek

+0

我正在考慮準備好的語句,但由於某種原因,我們必須使用mySql 4.01,幸好它似乎支持它。因爲我同意,這是把「膏藥」放在一切東西上,而其他東西最有可能會彈出。不過,我不需要在SqlParameters上找到它,但我需要閱讀它。多謝你們 ;) –

回答

1

如果您使用的是不支持預準備語句的MySQL舊版本,至少應該利用現代數據庫接口可以模擬數據庫本身不支持的特性。在你的情況下,它不是潛在的性能增益,而是通過語句語法和值表示的分離來增加安全性。