簡體   English   中英

mysql_real_escape_string和'

[英]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 asdidnamedesc )VALUES('','asd \\'lgh','knkk');

1

在此輸入圖像描述

mysql_real_escape_string(utf8_encode($data));

希望這會奏效。

甚至更好的是使用PDO而不是標准的mysql。

http://www.php.net/manual/en/class.pdo.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM