1

私はこのSQLを持っています:

INSERT INTO v3_peers 
                    (torrent, peer_id, ip, ipv6, port, smoke_ip, uploaded, downloaded, up_ofset, down_ofset, remaining, started, last_action, connectable, userid, agent) 
                    VALUES 
                    ('13471', '-UT2200-ĂZŤjśŻl‰şđ^', '69.64.147.243', '2001:0:5ef5:79fd:14e6:7214:2a5f:5811', '58262', '', '0', '0', '0', '0', '0', '1334945327', '1334945327', 'yes', '1', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19')

スクリプトで実行するとdbに保存されますが、peer_idは「-UT2200-」のみであり、ブラウザーはsriptの名前でファイルを保存するダイアログを表示し、コンテンツはプレーン/テキストでphp出力として返される必要があります

これをphpmyadminでdbに挿入すると、すべて問題ありません。

peer_id のデータ型は varchar(255) です

何が間違っているのですか?

4

4 に答える 4

1

安全な方法で変数をクエリに渡す必要があります。スクリプトとクエリを作り直して、変数がエスケープされて渡されるようにします。例えば:

$peer_id = mysql_real_escape_string('-UT2200-ĂZŤjśŻl‰şđ^');
$query = 'INSERT INTO `v3_peers` (`peer_id`) VALUES ("' . $peer_id . '")';
$result = mysql_query($query);

このようにして、変数がクエリ構造に影響を与えないようにします。

さらに、@tereškoが述べたように、PDOを試してください。クエリは頻繁に使用されるように見えるため、PDOとそのプリペアドステートメントが役立つ場合があります。私は最近誰かにそれを説明しました:PDOはhtmlコンテンツを保存するためのステートメントを準備しました。

于 2012-04-20T18:37:02.503 に答える
0

多分それを試してみてくださいutf8_decode()

于 2012-04-20T18:28:56.853 に答える
0

私は、MySQL が特殊文字を許可していないと信じています。

于 2012-04-20T18:21:05.243 に答える
-1

わかりました、エラーが見つかりました。db に挿入されたデータと SQL の $peer_id=$_GET[peer_id] 変数からの実際のデータを比較すると、次のようになります。

WHERE peer_id LIKE '".$peer_id."'

次に、dbのpeer_idがpeer_idとは異なるため、エラーが発生しましたが、使用するとエラーが発生しました

WHERE peer_id = '".$peer_id."'

それは完全に機能します。列 peer_id のエンコーディングは、utf8-general-ci ではなく utf8-unicode-ci に設定する必要があります!!

したがって、エンコーディングにはエラーはありませんでした (問題に書いたように phpmyadmin で欠落している文字は、実際には欠落していませんが、エンコーディングのために隠されています) が、エラーは他の scrip にあります。

お時間をいただきありがとうございます。これが将来誰かに役立つことを願っています。

于 2012-04-23T16:47:34.853 に答える