1

私がやろうとしているのは、

単語ファイルを開き、行を読み取り、md5に変換し、まだ存在しない場合はdbに書き込みます(単語と暗号化された文字列の両方)

なんらかの理由で動作しません。

$file = fopen("list.txt", "r");

while (!feof($file))
{
$word = fgets($file);
$word = mysql_real_escape_string($word); // to prevent injections
$md5string = md5($word);

//check if in DB

$check = mysql_query("SELECT id FROM table WHERE word='$word'") or die(mysql_error
    ());
if (mysql_num_rows($check) > 0)
{
} //Nothing to do.
else
{
    $write = mysql_query("INSERT INTO table (word, md5string) VALUES ('$word','$md5string')") or
        die(mysql_error());
}
}

それはハッシュを作成し、すべてを保存することですが、それは正しくありませんでした。

私のコードのどこが悪いのでしょうか?

修正:ハッシュする前に文字列をmysql_real_escapeしましたが、それが間違っていました。

$word = trim(fgets($file));
$md5string = md5($word);
$word = mysql_real_escape_string($word); // to prevent injections`

追加:ここから得た提案を使用してスクリプトを修正したところ、

Md5ecnrypter.comはそれを間違っています。

ハッシュする前に文字列をエスケープしています。ダサいよ。他のサイトをチェックして、SOの提案が正しいことを確認しました。

4

4 に答える 4

3

これを突き刺すだけですが、取得しているMD5は、mysql_real_escape_string()呼び出しによって変更された可能性のあるファイルのMD5です。

于 2012-04-04T17:43:24.310 に答える
2

たぶんmd5()前に使うmysql_real_escape_string()

于 2012-04-04T17:45:22.907 に答える
1

行の順序を変更してみてください

$word = trim(fgets($file));
$md5string = md5($word);
$word = mysql_real_escape_string($word); // to prevent injections
于 2012-04-04T17:45:45.777 に答える
0

ええと、

個人的には代わりにハッシュを探すので、次のようになります。

SELECT*FROMテーブルWHEREmd5word= $ hashed_word

また、単語をmd5する前にトリムを使用します。md5はデータを16進数に変換するため、md5の後にmysql_real_escape_string()を実行する必要はありません。 。

于 2012-04-04T18:03:23.123 に答える