2012-05-25 23 views
0

這一個讓我難住。當我嘗試將某些內容保存到包含撇號(')的數據庫時,它將保存該語義,直到此時爲止,此後不會。例如;MySQL'不保存句子'

說我試圖挽救這一點:報告詳細蒂姆·庫克在蘋果的變化,是好還是壞»

它節省:報告詳細蒂姆·庫克

它保存到數據庫正常,但之前只是一切在「

我的代碼:

if(isset($_POST['submit'])) 
{ 
global $db, $db_table_prefix; 


$origRLTitle = $_POST['RLTitle']; 
$origRLURL = $_POST['RLURL']; 
$origRLUserID = $_POST['user-id']; 

$RLTitle = mysql_real_escape_string($origRLTitle); 
$RLURL = mysql_real_escape_string($origRLURL); 
$RLUserID = mysql_real_escape_string($origRLUserID);  


if(strlen($RLTitle)>0 && strlen($RLURL)>0 && strlen($RLUserID)>0) 
{ 
mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
mysql_select_db("sf") or die(mysql_error()); 
mysql_query("INSERT INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')"); 
echo "Saved"; 
} 
} 

任何幫助,爲什麼它可能無法正確保存?我試過mysql_real_escape_string,但(如果我正確使用它),似乎並沒有工作。

附註:什麼是最好的方式來確保上述表格免受攻擊? 。

更新它也這樣做了「,以及

+0

你可以用'用htmlspecialchars(「someValue中」,ENT_QUOTES,「UTF-8」)'逃避所有的報價。 – inhan

+0

快速的問題,可能完全沒有意義。你不是從單詞或任何東西複製粘貼到Post Vars中嗎?你是在身體上打字嗎? –

+0

請停止使用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是一個很好的PDO相關教程](http://goo.gl/vFWnC)。 – orourkek

回答

1

你需要調用mysql_real_escape_string()後連接到數據庫:

if(isset($_POST['submit'])) 
{ 
    global $db, $db_table_prefix; 


    $origRLTitle = $_POST['RLTitle']; 
    $origRLURL = $_POST['RLURL']; 
    $origRLUserID = $_POST['user-id']; 
    mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
    mysql_select_db("sf") or die(mysql_error()); 

    $RLTitle = mysql_real_escape_string($origRLTitle); 
    $RLURL = mysql_real_escape_string($origRLURL); 
    $RLUserID = mysql_real_escape_string($origRLUserID);  


    if(strlen($RLTitle)>0 && strlen($RLURL)>0 && strlen($RLUserID)>0) 
    { 
     mysql_query("INSERT INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')"); 
     echo "Saved"; 
    } 
} 
+0

好點,但我懷疑這不是問題的核心。它反映了更多的charset問題(用'''是一些奇特的特殊字符而不是普通的'')。如果字符串轉義被破壞,他的數據庫中根本沒有任何東西 –

+0

我已經嘗試了上面的代碼,它仍然不能保存過去的',這個棘手的小點點兒。 –

0

變化

mysql_query("INSERT INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')"); 

$query = "INSERT INTO `ReadLater` (Title, URL, User_ID) VALUES ('".$RLTitle."', '".$RLURL."', '".$RLUserID."')"; 
echo $query; 
mysql_query($query); 

並檢查了您發送的實際查詢,很容易被發現的問題,然後:)