ホームページ  >  記事  >  バックエンド開発  >  PHP は、URL 経由でパラメーターを渡した後、2 つの同一のレコードを同時にデータベースに書き込みます

PHP は、URL 経由でパラメーターを渡した後、2 つの同一のレコードを同時にデータベースに書き込みます

WBOY
WBOYオリジナル
2016-06-23 13:47:511045ブラウズ

a.php ページを通じて URL を通じて 2 つのパラメーターを b.php ページに渡し、渡された 2 つのパラメーターを b.php ページを通じて mysql データベースに書き込みました。しかし、なぜ 2 つの同一のレコードがデータベースに追加されるのでしょうか。通常、パラメーターを渡さずに 1 日分のレコードを書き込みます。代わりに 1 つのパラメーターを渡すと、2 つの同一のレコードが書き込まれます。 これは、レコードを書き込むためのコードです。

<?phpheader("Content-Type:text/html; charset=utf-8");include('MY_PHP_file/mysql_connect.php');$sql = "INSERT INTO user_action (user_id, relation_id, concern_time) VALUES ({$_GET['user_id']}, {$_GET['relation_id']}, now())";// $sql = "INSERT INTO user_action (user_id, relation_id, concern_time) VALUES (0, 9, now())";if(mysql_query($sql));echo '<script>alert(\'操作成功!!\'); location.href=\'user_action.php\';</script>';// else// echo '<script>alert("操作失败,请重试!!"); location.href="user_action.php";</script>';?>

私は 1 日この問題に取り組んできました。ガイドしてもらえます


ディスカッション (解決策) に返信

完了したって言いませんでしたか?

SQL コマンド文字列に従ってください
$sql = "INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES ({$_GET['user_id']}, {$_GET['relation_id']}, now())" ;
パラメータが渡されない場合、実際の実行は
INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES (, , now()) です
これは間違った命令であり、データを挿入することは不可能です
しかし、あなたは「もしあなたが渡さないでください。パラメータは通常どおりレコードに書き込まれます。」 明らかに、このレコードは別の場所に挿入されました

あなたのコードはこれ以上のものであり、他の場所の影響を受ける可能性があります。

終わったって言いませんでしたか?

SQL コマンド文字列に従ってください
$sql = "INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES ({$_GET['user_id']}, {$_GET['relation_id']}, now())" ;
パラメーターが渡されない場合、実際の実行は
INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES (, , now()) です
これは間違った命令であり、データを挿入することは不可能です
しかし、あなたは「もしあなたが渡さないでください パラメータは通常どおりレコードに書き込まれます。」 明らかに、このレコードは別の場所に挿入されます


これは、パラメータを渡した後に 2 つのデータが挿入されるため、そのうちの 1 つがテストに使用されるためです。以前は正しく挿入される可能性は非常に低かったので、パラメーターに問題があるはずです

完了したと言いませんでしたか?

SQL コマンド文字列に従ってください
$sql = "INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES ({$_GET['user_id']}, {$_GET['relation_id']}, now())" ;
パラメータが渡されない場合、実際の実行は
INSERT INTO user_action (user_id, relationship_id, respect_time) VALUES (, , now()) です
これは間違った命令であり、データを挿入することは不可能です
しかし、あなたは「もしあなたが渡さないでください パラメーターは通常どおりレコードに書き込まれます。」 明らかに、このレコードは別の場所に挿入されました


彼の問題は、ページがジャンプしたときの問題のようです。彼が説明したように、コードのこの部分だけではない可能性があります。このクリックの実行時に、彼のすべてのコードがデータベースへの他の挿入操作を実行する可能性があります。挿入値がこのページを介して渡されることを識別するパラメーターを追加できますか?つまり、mysql の user_id、relation_id、concern_time の後にフィールド s_url を追加し、そこに値を挿入して、2 つのレコードの s_url の値が同じかどうかを確認します

URL を b.php に送信します。ページは a.php ページを通じて 2 つのパラメーターを渡し、渡された 2 つのパラメーターを b.php ページを通じて mysql データベースに書き込みます

まず b.php を直接呼び出して、2 つのレコードが挿入されているかどうかを確認します。
b.php が正常であれば、問題は a.php にあり、その逆も同様です。

提供されたコードを見ると、insert ステートメントが 1 つしかないため、2 つのレコードは挿入されません。

ページ a からページ b へのリクエストヘッダーにリファラー情報があるかどうかを確認してください。これにより、ステートメントが繰り返し送信される問題が発生する可能性があります。パラメーターを使用してアドレスバーに b ページのアドレスを直接入力して、同じデータが書き込まれるかどうかを確認してみてください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。