2011-01-19 98 views
9

我使用mysql_real_escape_string在將字符串插入到我的mysql數據庫之前轉義字符串。mysql_real_escape_string和'

一切工作正常,但字符被錯過,並通過mysql變成’

我該怎麼做才能解決問題?我應該使用更好的函數來逃避字符串嗎?

我也擔心其他charachters可能會錯過,並被類似變成廢話!

請幫忙!

謝謝:)

回答

16

字符'不會被錯過,它只是一個字符,不被mysql用來包裝字符串,並且不需要被轉義。

它變成這個奇怪的字符串的原因是因爲它是一個多字節字符,並且你把它放到一個字節字段中。

+8

要澄清,「和」 – dqhendricks 2011-01-19 19:33:49

+2

+1之間有區別也可能是客戶端/服務器編碼問題(即:`SET NAMES`)。 – netcoder 2011-01-19 19:54:04

4

您應該使用綁定變量,而不是準備好的語句:http://php.net/manual/en/pdo.prepared-statements.php這樣你就不必擔心逃避任何事情。我在鏈接到的文檔中提到了這些優點。

+0

這似乎明顯比任何引用的數量都好,我驚呆了PHP團隊並沒有刪除mysql_real_escape_string()作爲一個愚蠢的第一次嘗試。 – sarnold 2011-02-06 11:08:15

2

mysql_real_escape_string()只是轉義少數字符(使用\'s),使他們「安全」推入您的查詢。您的數據似乎與您的數據(樣式化報價)和列編碼類型不匹配。 mysql_real_escape_string永遠不會解決這種問題。

1

這是一個奇特的報價?如果是這樣,由於字符編碼的差異,它可能看起來像數據庫中的亂碼。每個表都有一個關聯的字符編碼,並且連接有它自己的編碼。

嘗試在查詢之前執行「SET NAMES utf8」。這將設置連接的編碼爲UTF-8。當然,如果你試圖存儲UTF-8字符,比如拉丁表,你仍然不會得到你期望的結果。

0

這是一個特殊字符爲此,你需要使用UTF編碼

廣場這條線在哪裏,你在數據庫中插入數據的頁面頂部

header ('Content-type: text/html; charset=utf-8'); 

希望工程

-1
mysql_real_escape_string(utf8_encode($data)); 

希望這會起作用。

-1
<?php 
    if(isset($_GET['submit'])) 
    { 
     mysql_connect('localhost','root',''); 
     mysql_select_db('test'); 
     $var=mysql_real_escape_string($_GET['asd']); 
     $sql="INSERT INTO `test`.`asd` (`id` ,`name` ,`desc`)VALUES ('', '$var', 'knkk');"; 
     echo $sql."<br />"; 
     $res=mysql_query($sql) or die('error'); 
     echo $res; 
    } 
?> 

<html> 
<body> 
    <form name="f1" method="get"> 
     <input type="text" name="asd"> 
     <input type="submit" name="submit"> 
    </form> 
</body> 
</html> 

輸出:

INSERT INTO testasdid,name, desc)VALUES('','asd''lgh','knkk');

enter image description here

0

它將情況下工作,你已經建立了與MySQL連接:請求mysql_query( 「集名稱 'UTF8'」);

換句話說,如果未設置SET NAMES'utf8',則不需要utf8_encode。