我使用mysql_real_escape_string在將字符串插入到我的mysql數據庫之前轉義字符串。mysql_real_escape_string和'
一切工作正常,但字符’
被錯過,並通過mysql變成’
。
我該怎麼做才能解決問題?我應該使用更好的函數來逃避字符串嗎?
我也擔心其他charachters可能會錯過,並被類似變成廢話!
請幫忙!
謝謝:)
我使用mysql_real_escape_string在將字符串插入到我的mysql數據庫之前轉義字符串。mysql_real_escape_string和'
一切工作正常,但字符’
被錯過,並通過mysql變成’
。
我該怎麼做才能解決問題?我應該使用更好的函數來逃避字符串嗎?
我也擔心其他charachters可能會錯過,並被類似變成廢話!
請幫忙!
謝謝:)
字符'不會被錯過,它只是一個字符,不被mysql用來包裝字符串,並且不需要被轉義。
它變成這個奇怪的字符串的原因是因爲它是一個多字節字符,並且你把它放到一個字節字段中。
您應該使用綁定變量,而不是準備好的語句:http://php.net/manual/en/pdo.prepared-statements.php這樣你就不必擔心逃避任何事情。我在鏈接到的文檔中提到了這些優點。
這似乎明顯比任何引用的數量都好,我驚呆了PHP團隊並沒有刪除mysql_real_escape_string()作爲一個愚蠢的第一次嘗試。 – sarnold 2011-02-06 11:08:15
mysql_real_escape_string()只是轉義少數字符(使用\
's),使他們「安全」推入您的查詢。您的數據似乎與您的數據(樣式化報價)和列編碼類型不匹配。 mysql_real_escape_string永遠不會解決這種問題。
這是一個奇特的報價?如果是這樣,由於字符編碼的差異,它可能看起來像數據庫中的亂碼。每個表都有一個關聯的字符編碼,並且連接有它自己的編碼。
嘗試在查詢之前執行「SET NAMES utf8」。這將設置連接的編碼爲UTF-8。當然,如果你試圖存儲UTF-8字符,比如拉丁表,你仍然不會得到你期望的結果。
這是一個特殊字符爲此,你需要使用UTF編碼
廣場這條線在哪裏,你在數據庫中插入數據的頁面頂部
header ('Content-type: text/html; charset=utf-8');
希望工程
mysql_real_escape_string(utf8_encode($data));
希望這會起作用。
甚至更好的是使用PDO而不是標準的mysql。
<?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 test
。asd
(id
,name
, desc
)VALUES('','asd''lgh','knkk');
它將情況下工作,你已經建立了與MySQL連接:請求mysql_query( 「集名稱 'UTF8'」);
換句話說,如果未設置SET NAMES'utf8',則不需要utf8_encode。
要澄清,「和」 – dqhendricks 2011-01-19 19:33:49
+1之間有區別也可能是客戶端/服務器編碼問題(即:`SET NAMES`)。 – netcoder 2011-01-19 19:54:04