mysql_real_escape_string and '
-
12-10-2019 - |
質問
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を使用することです。
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