2012-03-26 1 views
1

私は次の2つのエラーに直面しています私のコードを実行すると:ファイルの内容を読み取り、それに文字列を追加 - SQLエラーとmysqlのエラー

はmysql_num_rows()パラメータ1がリソースであることを期待し、ブール

これは、ファイルのまれな行で発生します。残りの部分はうまく動作します。

SQL構文に誤りがあります。 はライン1

はい、その脆弱で 『 近くに「T』を使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し、私が参照してください。 問題を構成している奇妙なチャレスタがいるかもしれませんが、私はそれらをmd5ingするためにdbに単語を保存するので、実際に編集できます。

mysql_real_escape_stringはスラッシュを追加して別のmd5値を追加すると仮定します。では、データを編集してスクリプトを同時に安全にすることはできませんか?

require ("dbconnect.php"); 
$list = fopen("huge.txt","r"); 
//convert and save to db 
while(!feof($list)) 
    { 
    $word = fgets($list); 

    //check if already in db. 
    $check = mysql_query("SELECT id FROM `database` WHERE word='$word'") or 
    die(mysql_error()); 
    if (mysql_num_rows($check)==0) 
    { 
    //rest of the codes 

私はちょうど私がいただきました!が間違って表示させるためにdie()を追加しました。

+1

mysql_real_escapeはstringの値を変更しません。あなたはそれを使用することができます – safarov

+0

@safarov恐ろしい。私は余分なスラッシュを追加すると思った。私が直面している他の問題のアイデア?ありがとう – Kishor

+1

はどちらも同じ問題の原因です – safarov

答えて

1

質問1の場合、データベース接続が1つしかない場合は、mysql_num_rows()に引数を渡すべきではありません。

質問2の場合、エスケープされたバージョンは、データベースに保存され、データベースから再度プルされる限り、異なるハッシュを生成しません。エスケープされた文字列がデータベースに保存されると、保存されたバージョンは効果的にエスケープ文字を失います。これは、データベースからエスケープされた値を取り出すときなど、「they \ 're」が表示されない理由です。

基本的に、ハッシュを最初に作成するときは、ハッシュ入力にはエスケープされていないバージョンの文字列を使用してから、平文のバージョンをエスケープしてデータベースに保存する必要があります。その後、いつでもデータベースから平文バージョンを取得して再ハッシュし、一致するハッシュ値を作成する必要があります。

+0

最初にエスケープされていないバージョンを最初にハッシュする必要があると私に伝えましたか? 平文をエスケープして保存し、再度プルしてハッシュすることはできますか? どちらも、私が言ったのと同じハッシュです。ではない? – Kishor

+0

@Kishorはい、私の唯一のポイントは、ハッシュを作成するための入力としてエスケープされたバージョンを使用しないことでした。 – dqhendricks

+0

私はまだそれが何であるか把握できません。なぜなら、あなたは両方とも同じであろうと言っているからです。何か不足していますか? – Kishor

関連する問題