2011-06-29 7 views
2

パスワードを持つようにユーザーを更新する更新クエリを作成しようとしています。更新ステートメントは非常に簡単ですし、今私は約12時間私を困惑されています。PHP SQLの更新が壊れていますか?

Google検索の3.5ページでこれに関するすべてを読んだことがあります。何らかの理由で、私には何の示唆もありません!ここで

は、「オリジナルの」形式でUPDATEクエリです:私は、この更新クエリを実行すると

$sql_update = "UPDATE users_sensitive SET password = '$password_hash', ch_password = '$password_hash' WHERE email_hash = '$email_hash'"; 
$result_update = mysql_query($sql_update) or die(mysql_error()); 

は、私がエラーか何か何を取り戻すん。それだけでも更新されません。

はここで同じコードの別の演出です:再び

$sql_update = "UPDATE users_sensitive SET password = '" . $password_hash . "', ch_password = '" . $password_hash. "' WHERE email_hash = '" . $email_hash . "'"; 
$result_update = mysql_query($sql_update) or die(mysql_error()); 

、何も起こりません。

私はここの代わりにPHPの変数の中に実際の数字を入れるとき:

$sql_update = "UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac'"; 
$result_update = mysql_query($sql_update) or die(mysql_error()); 

(心配しないでください、それは機密情報ではありません)これは、実際に更新しない...だから

、I私の構文が間違っていると仮定していますか?私はこれらが文字列ではなく文字列であることを知っているので、それらの周りに一重引用符が必要です。私は必要とする2つの変数を持っており、両方が正確に何をすべきかを示しています。私は列の名前の周りにバックティックを使用しようとしましたが、それは何もしませんでしたか?

私はvar_dumpを実行し、 "true"に戻りました。

私は私の$ SQL_UPDATEで印刷を行うと、私が手:

UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33', ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac' 

ここには空白がありません。 私は$のresult_updateを印刷するとき、それが思い付く:1

ANSWER は、bemaceするジェームズ・アンダーソン、VolkerK、アレックスと他人をありがとう!

問題は、データベースと同じではない空白を作成するコードに奇妙な改行があったことです。

バックトラックした後、私はこのページのコードの冒頭に気づき、URLからハッシュ番号を取得するためにGETを使用しました。変数の作成中に、テスト中に、テスト目的でのみ変数に改行を追加しました。私は(愚かに)そこに改行を残しました。隠しフォームフィールドでその変数を使用するときに、改行が含まれていました。

最初の行から改行した後、すべてが一致し、すべてが良好です。

これを読んでいて、後で投稿する予定がある場合は、コード全体を投稿する価値があります。私が持っていたなら、この問題は早く修正されていたでしょう。

もう一度、迅速な対応とトラブルシューティングに感謝します!

+0

これらの変数を補間する前に 'mysql_real_escape_string()'を使っていますか? – alex

+1

あなたの期待に合うようにwhere条件の変数をチェックしましたか? – fyr

+0

'var_dump($ result_update)'とは何ですか? –

答えて

3

あなたのwhere句に何も一致していないというエラーはなく、更新はありません。 $email_hashに先頭または末尾の空白がなく、切り捨てられていないことを確認してください。

更新がロールバックされているトランザクションの一部である可能性は低くなります。

もう一つ可能性は低い:正しいサーバーに接続していますか?

+0

私はvar_dumpを実行し、 "true"に戻りました。私の$ sql_updateで印刷すると、次のように表示されます。UPDATE users_sensitive SET password = '700b5b23b511d974fe9eeb17ad350b33'、ch_password = '700b5b23b511d974fe9eeb17ad350b33' WHERE email_hash = 'ac24dab060a172d8c0b3679d8ae61cac' - 空白はありません。 $ result_updateを印刷すると、次のようになります。1 – Nathan

+1

「select * from users_sensitive」とは何ですか?email_hash = '$ email_hash'? –

+0

私のクイックテストから、何も起こりません...私のコードは: '$ sql_select =" SELECT * FROM users_sensitive WHERE email_hash = '$ email_hash' "; \t \t $ result_select = mysql_query($ sql_select); \t \t \t echo "test1"; \t \t \tながら($行=は、mysql_fetch_array($のRESULT_SELECT)){ \t \t \t \tがエコー$ user_sensitive_id = $行[ 'user_sensitive_id']。 \t \t \t \t echo $ user_id = $ row ['user_id']; \t \t \t \t \t echo "test"; \t \t \t}「私はemail_hashが表示されていないかのように「test1」しか受信しません。私は複数の時間をチェックして、電子メールのハッシュがデータベースに存在する! – Nathan

0

bemace、James Anderson、VolkerK、alexなど、ありがとうございます!

問題は、データベースと同じではない空白を作成するコードに奇妙な改行があったことです。

バックトラックした後、私はこのページのコードの冒頭に気づき、URLからハッシュ番号を取得するためにGETを使用しました。変数の作成中に、テスト中に、テスト目的でのみ変数に改行を追加しました。私は(愚かに)そこに改行を残しました。隠しフォームフィールドでその変数を使用するときに、改行が含まれていました。

最初の行から改行した後、すべてが一致し、すべてが良好です。

これを読んでいて、後で投稿する予定がある場合は、コード全体を投稿する価値があります。私が持っていたなら、この問題は早く修正されていたでしょう。

もう一度、迅速な対応とトラブルシューティングに感謝します!

+0

ところで、私はちょうど参加したので、私はこの全体のポストのために得た素晴らしい賞のすべてをリセットする必要があります!私はネイサンです、そして、あなたの助けをありがとう! – ntgCleaner