0

コンテンツタイプにノード関連付けフィールドがある drupal で db クエリを実行しようとしています。現在のノードの NID が、上記のメモ関連付けで指定されたノードのいずれかと一致する、そのタイプのすべてのメモを取得しようとしています。分野。

視覚的な例

Nodetype1 -- ノード関連フィールド

NodeType2

Node Association Field が現在ロードされている Nodetype2 の NID と一致するすべての Nodetype1 を取得したいと考えています。

私の現在のdbクエリは次のようになります:

db_query("SELECT * FROM field_data_field_promo_profile WHERE field_promo_profile_nid=".$N->nid);

そして、これは何も返しません。そのようなノードが存在するという事実を知っている場合、WHEREステートメントも削除しようとしましたが、次のような配列が返されます。

DatabaseStatementBase Object ( [dbh] => DatabaseConnection_mysql Object ( [shutdownRegistered:protected] => [target:protected] => default [key:protected] => default [logger:protected] => [transactionLayers:protected] => Array ( ) [driverClasses:protected] => Array ( [SelectQuery] => SelectQuery [DatabaseSchema] => DatabaseSchema_mysql [MergeQuery] => MergeQuery [DatabaseTransaction] => DatabaseTransaction [UpdateQuery] => UpdateQuery [InsertQuery] => InsertQuery_mysql ) [statementClass:protected] => DatabaseStatementBase [transactionSupport:protected] => 1 [transactionalDDLSupport:protected] => [temporaryNameIndex:protected] => 0 [connectionOptions:protected] => Array ( [database] => cityhound_dev [username] => blahblah [password] => blahblah [host] => localhost [port] => [driver] => mysql [prefix] => Array ( [default] => ) ) [schema:protected] => DatabaseSchema_mysql Object ( [connection:protected] => DatabaseConnection_mysql Object *RECURSION* [placeholder:protected] => 0 [defaultSchema:protected] => public [uniqueIdentifier:protected] => 4fd7fba9e563e2.50177866 ) [prefixes:protected] => Array ( [default] => ) [prefixSearch:protected] => Array ( [0] => { [1] => } ) [prefixReplace:protected] => Array ( [0] => [1] => ) ) [queryString] => SELECT * FROM field_data_field_promo_profile )

誰にもいくつかのアイデアがありますか?

4

2 に答える 2

0

db_query()反復可能なオブジェクトを返すので、それを反復処理するだけです:

$result = db_query("SELECT * FROM field_data_field_promo_profile WHERE field_promo_profile_nid=".$N->nid);

foreach ($result as $row) {
  $entity_id = $row->entity_id;
  // etc...
}
于 2012-06-13T09:33:08.560 に答える
0

SQL インジェクションを防ぐために、クエリでパラメーターを使用する必要があります。

たとえば、上記のクエリは次のようになります。


$result = db_query("SELECT * FROM {field_data_field_promo_profile} p
   WHERE p.field_promo_profile_nid = :nid ", array(':nid' => $N->nid);

foreach ( $result as $row ) {
  $entity_id = $row->entity_id;
  // etc...
}

于 2013-02-24T02:00:49.590 に答える