データベースに挿入したいすべての文字列をエスケープしたい。MySQLのリアルエスケープ - 独自のエスケープ - oをöに?
function escape($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
:しかし、私の問題は、だから私は、私はstackoverflow.comにここで見つけるこのエスケープ関数を、使用して...私がチェックする以上10.000の文字列を持っているので、データベースクエリがあまりにも多くなり、
です
これは機能しています。しかし、私の問題は、私はどのö
、ä
またはそのような文字を持っていないこと、である...
私はこの関数を呼び出す前に、私はこのような文字列があります:Königsedition
を、私は、この関数を呼び出した後、私はK\xc3\x83\xc2\xb6nigsedition
を取得する必要があります。しかし問題は、何らかの理由で私のデータベースにKxc3xb6nigsedition
を得ることです...
どうすればKönigsedition
に戻すことができますか?
または、その後、私はより10.000 SQLクエリよりもしなければならないので、文字列をエスケープするとUTF 8
書式設定を維持するために、SQLリアルエスケープ関数を使用せずに、文字列をエスケープする他の方法は何ですか? (私はこの方法が好きです!)
挨拶とありがとう!
パラメータ化クエリはどうですか? – frz3993
"何らかの理由で"あなたのデータベースに文字列があります。あなたはそうでない "エスケープ"関数を呼び出すことではありません。 INSERTステートメントまたはUPDATEステートメントを実行したため、データベースに文字列があります。その "エスケープ"関数からの文字列の戻り値を挿入する場合、それはあなたのデータベースに文字列を取得する "理由"です。なぜ私はあなたが挿入した文字列と異なる文字列*がデータベースに存在すると期待するのか理解できません。なぜこのエスケープ機能を使用しますか?私はその目的を理解していない。 – spencer7593
バインドプレースホルダでプリペアドステートメントを使用し、挿入する文字列の値を指定するだけです。値として渡される文字列のエンコーディングが、MySQLクライアントとカラムに対して指定された文字セットと一致することを確認してください。 https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html – spencer7593