2011-10-22 46 views
0

當我運行一個函數,使一個可點擊的鏈接出包含鏈接是什麼造成這種SQL語法錯誤

$text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)', 
    '<a href="\\1">\\1</a>', $text); 

,並試圖將其插入到數據庫中,我得到以下錯誤的字符串的這一部分:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'http://sitename.com/alpha/">http://sitename.com/alpha/' at line 1 

我不知道如何更正語法錯誤。提前致謝!

乾杯

+0

這與SQL有什麼關係? (爲什麼你仍然在使用'eregi_replace()'?) – BoltClock

+2

你能發佈正在執行的實際SQL語句嗎?正則表達式與SQL沒有任何關係...... – Farray

+0

它可能與引用有關(基於錯誤消息說明的野蠻黑暗猜測),但正如@Farray指出的那樣,請發帖實際的SQL。 – imm

回答

4

很可能你的SQL有一個注入漏洞,你試圖插入的HTML中的引號會發癢,或者當你將它插入查詢字符串時,你忘記引用你的$ text變量。

忽略的事實,額日格功能的家庭已經過時,不應該再使用:

$test = eregi_replace(blah blah blah); 
$test = mysql_real_escape_string($test); 

$sql = "INSERT INTO yourtable (htmlfield) VALUES ('$test');"; 

應該解決的問題。

+0

謝謝你解決了這個問題......如果文本只是鏈接,HTML會觸發什麼樣的注入漏洞 - > ttp://x.y.z.com/alpha/?由於此漏洞究竟是什麼錯誤? – algorithmicCoder

+0

您正在使用ereg,它不支持unicode。對於某人來說,製作一個unicode字符串是完全可能的,這個unicode字符串可以通過ereg進行一些合法的SQL命令。這就是爲什麼php的addslashes已被棄用和聲明完全沒有用於數據庫輸入消毒 - 它也不是unicode意識,並已允許惡意unicode字符串做sql注入。 –

0

我相信這是你的分隔符的代碼是起因。無論eregi_replace已棄用。改用use preg_replace()代替。