2012-04-25 22 views
1

當我保存在PHP字符串:如何在PHP中保存這個字符串?

John: "Yes you can". 

在我的數據庫保存爲:

John: \ 

我如何保存這些字符串以「(但不刪除」很明顯)。 這是我的PHP代碼:

$titlepost= mysql_real_escape_string($_POST['title']); 
$query = "INSERT INTO `titles` (`title`) VALUES ('".$titlepost."')"; 
$res = mysql_query($query) or die("Failed".mysql_error()); 

echo $titlepost; 

output: 
John: \\ 

FORM:

$title = mysql_real_escape_string($_GET['title']); 

<form method="post" action="title.php?done=yes" enctype="multipart/form-data"> 
<input type="text" size="25" name="title" <?php echo "value=\"".$title."\""; ?> > 
<input id="starit" name="submit" value="titleit" type="submit" /> 
</form> 
+0

嘗試使用addslashes功能。 http://php.net/manual/en/function.addslashes.php – yen1k 2012-04-25 07:23:00

+0

@ yen1k:**肯定不是!**'mysql_real_escape_string'是轉義MySQL查詢數據的正確方法。請參閱我對@ EdwinAlex的答案的評論,以獲取來自PHP文檔的報價。 – ThiefMaster 2012-04-25 07:23:46

+1

你可以顯示什麼'echo $查詢;'輸出? – Starx 2012-04-25 07:26:32

回答

2

您的問題與PHP或MysQL無關。

它和非常簡單的HTML語法規則一樣愚蠢。 這是很顯然的是,代碼

<input value="John: "YES you can> 

將只顯示援引「約翰:」部分。 爲了使正確的,有一個在價值

$titlepost = htmlspecialchars($titlepost,ENT_QUOTES); 
?> 
<input type="text" name="title" value="<?=$titlepost?>"> 

至於斜線編碼特殊符號 - 那是愚蠢過度引用問題。只需引用一次您的字符串,並確保您已關閉magic_quotes_gpc

-1

嘗試使用準備語句PDO

http://php.net/manual/en/pdo.prepared-statements.php

到預處理語句的參數不需要被引用;驅動程序自動處理這個。如果應用程序獨佔使用預準備語句,開發人員可以確保不會發生SQL注入(但是,如果正在使用未轉義的輸入構建查詢的其他部分,則仍然可以執行SQL注入)。

+1

好建議,但它不回答他的問題 – ThiefMaster 2012-04-25 07:25:53

+0

@ThiefMaster他問他如何將字符串保存到數據庫,而不會有逃避引號的問題。準備好的陳述是一個好的解決方案。 – Tim 2012-04-25 07:28:02

+0

是的,通常他們是。但即使在這種情況下,您也需要刪除由魔術引號引起的反斜槓。 – ThiefMaster 2012-04-25 07:29:01

0

如果你真的只是讓你的數據庫John: \,它聽起來就像你正在使用魔術引號(使你插入反斜槓在數據庫中,因爲你是逃避轉義字符串)列的大小太小了(這就是爲什麼反斜槓後面的東西丟失了)。

試試這個:

if(get_magic_quotes_gpc()) $_POST = array_map('stripslashes', $_POST); 
$titlepost = mysql_real_escape_string($_POST['title']); 

這確保了$_POST不包含將使用mysql_real_escape_string後打破任何魔法引號轉義數據。