2016-11-10 11 views
2

私はmysqlとphp(Laravel)を使用しており、非常に奇妙な状況に直面しています。これはMySQLのバグですか?

私は暗号化されたユーザータイプとユーザーIDを取得し、それを解読しようとしています。そのユーザーIDのレコードを検索します。

私のコードはこのようです。私はLaravelフレームワークを使用しています。

 $key = Config::get('app.key'); 
     $decodedUserIDwithType = base64_decode($encryptedUserIDwithType); 
     $decryptedUserIDwithType = mcrypt_decrypt(XXXXX , $key, $decodedUserIDwithType, XXXXXX); 
     $userIDwithType = $decryptedUserIDwithType; 

私はので、私はここで、それは100で、@でそれを爆発し、ユーザIDを検索します。この

[email protected] 

のようなものにするためにデコード値を期待しています。

私は手動で1文字または2文字を追加して暗号化された値を変更しました。私は解読とき、私は

[email protected]������������������������]u甀�+&�fj�W�ZЪS��d��]3�]" 

のようなものを持って、私はこれを爆発後100���]u甀�+&�fj�W�ZЪS��d��]3�]"

は、今私が使用して同じIDを持つすべてのRAWを選択すると、私はIDを取得します。 ID = $ ID

はそれがID = 100であっても、実際のIDとrecordesを選択しますテーブルFROM

SELECT *は100���]u甀�+&�fj�W�ZЪS��d��]3�]"

とても奇妙です。 id列の型がINTの場合、それが一致している可能性があります。

しかし、私の考え方からは、これが原因で私のロジック全体が正しくないので、非常に悪いです。

Laravelとraw MySQL Queryの両方でこのクエリを確認したところ、結果は同じです。

ご意見ありがとうございます。

UPDATE

は、私は影が言及した点をご理解、しかし、このような シナリオをどのように処理するか、解読から、私は100のようなIDを期待しています場合、私 は、1ASASASのようなものを得た場合intにキャストすると1になります(これは例えば です)。今問題は私のデータベースにはユーザID 1 もあるので、 間違ったユーザを取得するため、私はどれくらいの悩みがあるのか​​を見ることができます。悲しいことに、これは支払いに関するものです:P。いくつかの間違った ユーザーの財布が補充されます。これはバグではありません。この

+0

使用しているMySQLのバージョンは? – gabe3886

+0

バージョン:5.5.42 –

+0

私はそれがあなたのコラムのエンコーディングだと思っています – Beginner

答えて

3

を処理するために.howハハ、MySQLのマニュアルのType Conversion in Expression Evaluationセクションで説明した本は、MySQLの機能です:

をオペレータが異なる種類のオペランドで使用されている場合オペランドに互換性を持たせるために型変換が行われます。一部の変換は暗黙的に行われます。例えば、MySQLは必要に応じて数値を自動的に文字列に変換し、逆もまた同様です。MySQLは、文字列を数に変換したとき、それは限り、それは一部とみなすことができない文字に遭遇した場合、文字は、数や停止の一部として解釈することができるように、左から始まる文字を評価

数字の100���]u甀�+&�fj�W�ZЪS��d��]の場合、最初のは数字の一部として解釈されないため、100の後にMySQLが停止します。とにかく何らかのゴミのように見える100の後の文字とあなたはそのゴミを生産する理由をあなたのPHPコードをチェックする必要があります。

+3

*これは良い状態です。バグではありません、これは機能です* - すべての開発者がこれまでに言ったように、hahahaha – Phiter

+4

少なくともMySQLの開発者はそれを文書化しました:) – Shadow

+0

@Shadow、I unこのようなシナリオをどのように扱うかは解読から私は100のようなidを期待していますが、私は1ASASASのようなものを得ます。 intにキャストすると1になります(これは単なる例です)。今の問題は私のデータベースにもユーザーIDが1であることです。だから、あなたは間違ったユーザーを取得するため、私はどれくらいの額を見ることができます。悲しいことに、支払いに関連しています。いくつかの間違ったユーザーの財布が補充されます。 haha。これを処理する方法 –

関連する問題