我一直在困惑這一段時間,並終於屈服於在這裏尋求幫助。撇號和反斜槓悖論
我有一個用於抓取的preg_match腳本,它匹配循環中的不同變量並將它們存儲在數組中,最終被髮布到SQL表中。每當變量包含撇號時都會出現問題。
下面是如何抓取和整理數據現在
for($i = 0; $i < count($bokse[0]); $i++){
preg_match_all("/title=\"Mere information om (.+?)\"/sim", $bokse[0][$i], $name, PREG_SET_ORDER);
$laeger[$i]['navn'] = stripslashes(mysql_real_escape_string($name[0][1]));
}
的東西,我抓住,mysql_escaped價值和剝離可以是:
**Michael D'Angelo** [NOTICE THE APOSTROPHE]
如果我想回應這給頁,我可以成功地回顯D'angelo
正確(帶撇號)
echo $laeger[$i]['navn'];
會給我Michael D'Angelo
。但是,當把它存儲在數據庫中時,我遇到了一個悖論;我可以選擇將其存儲爲Michael D\'Angelo
或者存儲D並接收到SQL錯誤。
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 'angelo'
(..........blablabv...............)
下面是如何存儲數據
mysql_query("INSERT INTO table (name) VALUES ('".$laeger[$i]['navn']."'")"); or die(mysql_error());
取決於如果我的stripslashes與否,我會要麼亂了查詢或陷入困境的結果(用bachflash)。 FML。
'stripslashes'撤銷了什麼'mysql_real_escape_string'做了什麼。這就是爲什麼輸出未被轉義並且稍後不適合SQL字符串上下文的原因。 – mario
我不認爲你明白什麼是悖論。 –