[英]mysql_real_escape_string and ’
我正在使用mysql_real_escape_string來轉義字符串,然后將其插入到我的mysql數據庫中。
一切都運行正常,除了這個角色'
被錯過並變成了由’
。
我該怎么做才能解決問題? 我應該使用更好的函數來逃避字符串嗎?
我也擔心其他人可能會被錯過而且同樣變成廢話!
請幫忙!
謝謝 :)
字符'不會被遺漏,它只是一個mysql不用於包裝字符串的字符,不需要轉義。
它變成那個奇怪的字符串的原因是因為它是一個多字節字符,你將它放入一個單字節字段。
您應該使用帶有綁定變量的預准備語句: http : //php.net/manual/en/pdo.prepared-statements.php這樣您就不必擔心轉義任何內容。 我鏈接到的文檔中提到了這些優點。
mysql_real_escape_string()只是轉義一些字符(使用\\
'),使它們“安全”地推入你的查詢。 您似乎與您的數據(樣式化引號)和列編碼類型的編碼不匹配。 mysql_real_escape_string永遠不會解決這類問題。
這是一個花哨的報價嗎? 如果是這樣,由於字符編碼差異,它可能在您的數據庫中看起來像亂碼。 每個表都有一個關聯的字符編碼,連接有自己的編碼。
在查詢之前嘗試執行“SET NAMES utf8”。 這將設置連接的編碼為UTF-8。 當然,如果您嘗試將UTF-8字符存儲到latin1表中,您仍然無法獲得預期的結果。
如果你已經建立了mysql連接,它將起作用:mysql_query(“SET NAMES'utf8'”);
換句話說,如果未設置SET NAMES'utf8' ,則不需要utf8_encode。
這是一個特殊字符,您需要使用UTF編碼
將此行放在頁面頂部,您將數據插入數據庫中
header ('Content-type: text/html; charset=utf-8');
希望它有效
<?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>
輸出:
插入test
。 asd
( id
, name
, desc
)VALUES('','asd \\'lgh','knkk');
1
mysql_real_escape_string(utf8_encode($data));
希望這會奏效。
甚至更好的是使用PDO而不是標准的mysql。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.