2009-07-01 6 views
0

私はクッキーを設定しています。次のようなものがあります:MySQLクエリのSHA salt

$_COOKIE['test'] = SHA1('124'.'mysalt'); 

124は私が望む私のIDです。 SQLクエリに「mysalt」を追加する方法

$sql = ("SELECT * FROM users WHERE SHA1(`id`) = '".mysql_real_escape_string($_COOKIE['test'])."'"); 

:だから、私のMySQLのテーブルに、私のようなクエリを実行しようとしていますか?そうでなければ、正しいIDを取得したいからです。

答えて

4

これにはConcat()を使用できます。

SELECT ... Sha1(Concat(`id`, 'mysalt'))=... 
+0

注意:このケースでは、検索を高速化するためにインデックスを使用することはできません。 SELECT ... WHERE id = 124 AND tempkey = '87gesafouvgbaesofiuigsaf' – VolkerK

1

クエリは次のようになります。

$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,`mysalt`)) = '".mysql_real_escape_string($_COOKIE['test'])."'"); 

私はあなたが何をしようとして、正しく理解していれば。

+0

のようなクエリを実行すると、別のフィールドをテーブルに追加する方が良いかもしれません。 – Roberto

+1

リクエストを実行するたびにMySQLが 'SHA1(CONCAT( 'id'、 'mysalt'))'を計算しなければならないので、 'users'テーブルが大きくなるとパフォーマンスが低下し、パフォーマンスが低下します。 id_hash = mysql_real_escape_string($ _ COOKIE ['test']) ' – MaxAuray

0

使用CONCAT:おそらくすでに提供

$sql = ("SELECT * FROM users WHERE SHA1(CONCAT(`id`,'mysalt')) = '".mysql_real_escape_string($_COOKIE[''test''])."'"); 
+0

には、なぜSHA1(CONCAT( 'id'、 'mysalt'))'を含む新しい列 'id_hash'を追加し、 OPはconcatを使用しますか? – markus

1

ソリューションがうまく動作します、しかし、あなたはこれをしたい確信していますか?フィールド "id"が本当に別のIDであれば、 "LIMIT 1"を使ってmysqlがすべてのアイテムを検索するのを止めることができます。もう1つのことは、なぜこれに別の事前計算フィールドを使用しないのですか?私はすべてのクエリでmysqlがこれらのsha1値を​​すべて不必要に計算する必要があることを意味します。私はなぜあなたのアプローチを使用しているのかは不明ですが、私の推測では、何らかのセッションキーを実装するのがベストでしょう。私は、これはいくつかの理由で悪い考えです:誰かがあなたの塩を保持したら、彼はあなたのすべてのアカウントにアクセスできます。誰かが1つの「セッション」を嗅ぐと、いつでも彼はそれを再利用できます。弱い塩を選ぶことは重大な結果につながる可能性があります。 HTH。