3

それで、パスワード変更テーブルを作成しています

いくつかの 1 つの変更がパスしたら、彼のユーザー名、newpass、および確認コードを PassChange テーブルに挿入します (そのため、後で確認の電子メールを彼に送信します) アイデアは簡単で、使用するコードは次のとおりです。

 $insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error());

私はこのエラーを受け取りますが:SQL構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の 'username'', '4da59df8d4007807e7230e0881fbf774', '16585482')' 付近で使用する正しい構文を確認してください。

注: テーブル内のすべての列形式は varchar に設定されています。

mysql データベースへの接続は正常です。テーブル名は正しいです。

この問題は私を夢中にさせています。どこに問題があるのか​​ わかりません。誰かが私を助けることができれば、とても感謝しています:)

事前に感謝します。

編集:私は実際にそれを解決しました.SQLコマンドで同様の問題が発生した場合は、解決策を検索してこの投稿にアクセスした人のために、それをエコーし​​てみて、文字列がデータベースにどのように正確に移動されるかを確認してください:-)、みんなで楽しくコーディング。

そして、私があなたの時間を無駄にした場合は申し訳ありません:) phpとmysqlの初心者です:D

4

6 に答える 6

1

1列ずつクエリを実行しようとしましたか?

つまり :

INSERT INTO TempChangePass (UserName) values ( '$UserName' ); 

それからそれを合計しますか?

私がエラーを受け取ったときに主に私のために働きます;)

ただのアイデア。

于 2012-05-18T18:44:31.893 に答える
1

クエリを作成する前に、サニタイズ スクリプトを使用してみてください。

使用する

mysql_real_escape_string()

編集

MySQLi今すぐバージョンを使用する必要があります

mysqli_real_escape_string()

または OOP メソッド

mysqli::real_escape_string()

MySQL の代わりに MySQLi を使用する理由

于 2012-05-18T18:51:49.677 に答える
1

これを試して:

$insertResult=mysql_query("INSERT INTO TempChangePass(UserName, NewPass, ConfirmationCode) VALUES('$UserName', '$newPass', '$code')") or die (mysql_error());

SQL に余分なスペースがあります。

于 2012-05-18T18:56:03.147 に答える
1

変数を囲む一重引用符を削除します。PHP はそれらを文字列として解釈しています。

 $insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')") or die (mysql_error());

さらに、次のようなことをしたいかもしれません:

$sql = "INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')";

echo $sql;

そのエコーを取得して、手動で実行してみてください。

于 2012-05-18T18:40:08.977 に答える
1

実際のユーザー名に一重引用符が含まれているようです。実際に'username'username. それらを削除してみて、その後動作するかどうかを確認してください。

この問題に対処する (そして SQL インジェクションを防ぐ) 推奨される方法は、準備済みステートメントを使用することですが、本当に必要な場合は、mysql_real_escape_string($UserName)(参照)を使用してインラインで行うことができます。

于 2012-05-18T18:40:09.047 に答える
1

sql injection のように見えます。あなたの $username は $username = "username'" であると確信しています。一重引用符を見てください。したがって、クエリは次のようになりました。

$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('username* '' *, '4da59df8d4007807e7230e0881fbf774', '16585482')") or die (mysql_error());

于 2012-05-18T18:40:47.253 に答える