web-dev-qa-db-ja.com

'username_exists'はデータベースからレコードを削除した後もIDを返しますか?

デフォルトで有効になっているMySQLクエリキャッシュがありますか。私はユーザーインポートスクリプトで作業しようとしています、そして私はusername_existsテーブルからレコードを削除した後に私はwp_users関数からいくつかの奇妙な結果を見ています。 username_existsを呼び出したときにレコードを削除した後、Wordpressはfalseではなく削除されたユーザーのIDを返しています。奇数何が足りないの?

4

デフォルトでは、WordPressはデータベースへの旅行を節約するために $wp_object_cache のインスタンスであるWP_Object_Cacheを使用します。

username_exists() 関数をたどると、 get_user_by()WP_User::get_data_by() を使用していることがわかります。そのユーザがデータベースに存在するかどうかをチェックせずに、すぐに$wp_object_cacheからのユーザデータ。 $wp_object_cacheはメモリに格納されています。

つまり、ユーザーキャッシュをクリーンアップせずにデータベース内のユーザーレコードを直接削除した場合でも、ユーザーデータは利用可能です。それが問題です。

それであなたは何が足りないのですか?

  1. 正しい方法でユーザーを削除しない。

  2. クリーンユーザーキャッシュ がありません。

2
MinhTri

Mysqlコンポーネント側のリクエストキャッシング(この場合には影響がない可能性があります)から始めて、キャッシングはどこでも構いません。また、ワードプレス側のオブジェクトキャッシングも可能です。

おそらくあなたのコードで何か間違ったことをしているのでしょうが、それを削除するためにAPI(あるいはそれへのフロントエンドとしてwordpressの管理者)を使うことは常にDBに直接アクセスすることによってそれらを削除することを試みます。問題となる可能性があるのはキャッシュだけではなく、ユーザーメタやその他の構成設定も考慮に入れないことです。

1
Mark Kaplun