デフォルトの Drupal 登録フォームにフックして変更するモジュールを作成しました。フォームが処理されると、(DOM 解析を介して) 外部 Web ページから情報を取得し、重複を防ぐために、取得するデータが既存のユーザーのプロファイル フィールドに既に存在するかどうかを確認します。解析スクリプト自体が必要な情報を取得しています (この情報はエラー メッセージに表示されます)。私の人生では、データベース内の適切なプロファイル フィールドをスキャンしてデータを取得するためのクエリを取得できません。
ここに私が書いた関数があります:
function CustomVerify_CheckName($name, $server){
$result = db_select('field_data_field_character_first_name','u')
->fields('u',array('field_character_first_name'))
->condition('field_character_first_name', $name)
->condition('field_character_server', $server)
->range(0,1)
->execute()
if($result->rowCount > 0):
return TRUE;
endif;}
いくつかのバリエーションを試しました。「field_data_field_character_first_name」を「users」に置き換え、「data」フィールドのフィールドを交換します (これは、適切なグループ化がユーザーのプロファイル テーブル エントリに記録される場所だと思いますか?)。
エラーメッセージは次のとおりです。
PDOException: SQLSTATE[42S22]: 列が見つかりません: 1054 不明な列 'u.field_character_first_name' in 'field list': SELECT u.field_character_first_name AS field_character_first_name FROM {field_data_field_character_first_name} u WHERE (field_character_first_name = :db_condition_placeholder_0) AND (field_character_server = :db_condition_placeholder_1)リミット 1 オフセット 0; CustomVerify_CheckName() の配列 ( [:db_condition_placeholder_0] => David Mortimer [:db_condition_placeholder_1] => Saturn ) (C:\xampp\htdocs\drupal\sites\all\modules\customverify\customverify.module の 78 行目)。
このメッセージを使用して、いくつかのバリエーションを試しましたが、すべて同じ結果になりました。条件プレースホルダーから、ユーザーのプロファイル データがオフサイト DOM から取得されていることがわかります。
明らかに、私の問題は、必要な情報を取得するためにこのクエリを構造化する方法を完全に理解していないことです。フィールドは、'field_character_first_name' および 'field_character_server' としてユーザーのデフォルト プロファイル (私はカスタム プロファイル モジュールを使用していません) にアタッチされています - 人々は異なるサーバーで同じ名前を持つことができるため、キャラクター名が異なることを確認する必要があります。解析 DOM オブジェクトが返すサーバー上に存在します。繰り返しますが、DOM オブジェクト部分は完全に機能しています。