2012-06-13 6 views
0

Я пытаюсь запустить db-запрос в drupal, где тип содержимого имеет поле ассоциации узлов, и я пытаюсь получить все заметки этого типа, где NID текущего узла соответствует любому узлов, указанных в указанном поле ассоциации заметок.DB Query in Drupal 7

визуальный пример

Nodetype1 - Узел Ассоциация полевой

NodeType2

Я хотел бы получить все Nodetype1, где узел ассоциации поле соответствует NID из Nodetype2, загруженной.

Мой текущий запрос дб следующим образом:

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) 

У кого-нибудь есть идеи?

ответ

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... 
} 
+0

хорошо я постараюсь это, как я проверить, если результаты пуст, потому что даже если она ничего не возвращает это не пустой массив, когда он пуст, он вызывает ошибки повсюду. – flaiks

+0

см. Я попробовал это, и он вернул db-ошибки, может быть, потому что im запрашивает поле и узел типа контента? – flaiks

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... 
} 
 
Смежные вопросы