質問

MySQL_Real_Escape_Stringを使用して、MySQLデータベースに挿入する前に文字列をエスケープしています。

キャラクターを除いて、すべてが正常に機能しています 見逃され、変わります ’ mysqlによって。

問題を解決するために何ができますか?文字列を逃れるためにより良い機能を使用する必要がありますか?

また、他のキャラクターが見逃され、同様にナンセンスに変わっているのではないかと心配しています!

助けてください!

ありがとう :)

役に立ちましたか?

解決

キャラクターは見逃されていません。それは単にMySQLが文字列を包むために使用していないキャラクターであり、逃げる必要はありません。

それがその奇妙な文字列に変わる理由は、それがマルチバイトのキャラクターであり、あなたがそれを単一のバイトフィールドに入れているからです。

他のヒント

代わりに、バインド変数を使用して準備されたステートメントを使用する必要があります。 http://php.net/manual/en/pdo.prepared-statements.php これにより、何かを逃れることを心配する必要はありません。利点は、私がリンクしたドキュメントに記載されています。

mysql_real_escape_string() 単に一握りの文字を脱出します(使用してください \'s)クエリに押し込むためにそれらを「安全」にすること。データ(スタイル付きの見積もり)と列エンコードタイプでエンコードの不一致があるように見えます。 mysql_real_escape_stringは、そのような問題を決して解決しません。

それは派手な引用ですか?もしそうなら、キャラクターをエンコードする違いのため、データベースではおそらく気まぐれなように見えます。各テーブルには関連する文字エンコードがあり、接続には独自のエンコードがあります。

クエリの前に「utf8をset name utf8」を実行してみてください。これにより、UTF-8への接続のエンコードが設定されます。もちろん、UTF-8文字をラテン語のテーブルなどに保存しようとしている場合でも、予想される結果が得られません。

これは、UTFエンコードを使用する必要があるこれの特別なキャラクターです

この行は、データベースにデータを挿入しているページの上部に置きます

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

それがうまくいくことを願っています

mysql_query( "set names 'utf8'")とのmysql接続を確立した場合に動作します。

言い換えれば、if 名前「utf8」を設定します 設定されていません、utf8_encodeは必要ありません。

さらに良いのは、標準のMySQLの代わりにPDOを使用することです。

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

mysql_real_escape_string(utf8_encode($data));

これがうまくいくことを願っています。

<?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)値( ''、 'asd ' lgh '、' knkk ');

1

enter image description here

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top