Никак не могу разобраться как работают запросы к базе данных.
подскажите пожалуйста что делают запросы.. как их использовать.. вот везде приводятся подобные примеры:
<?php
$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title'));
$query->condition('n.nid', 5, '>=');
$result = $query->execute();
?>
т.е. выборка из таблицы node с условием айди больше пяти.
никак не могу найти пример использования таких запросов..
предполагая что $result - это массив и пытаюсь его распечатать ожидая увидеть там айди нод с заголовками:
<?php
echo '<pre>';
print_r($result);
echo '</pre>';
?>
в итоге выводится такая штука:
(
[dbh] => DatabaseConnection_mysql Object
(
[needsCleanup:protected] =>
[target:protected] => default
[key:protected] => default
[logger:protected] =>
[transactionLayers:protected] => Array
(
)
[driverClasses:protected] => Array
(
[SelectQuery] => SelectQuery
[MergeQuery] => MergeQuery
[DatabaseTransaction] => DatabaseTransaction
[InsertQuery] => InsertQuery_mysql
)
[statementClass:protected] => DatabaseStatementBase
[transactionSupport:protected] => 1
[transactionalDDLSupport:protected] =>
[temporaryNameIndex:protected] => 0
[connectionOptions:protected] => Array
(
[database] => test_drupal_p
[username] => test_drupal_p
[password] => Fbnwew59
[host] => localhost
[port] =>
[driver] => mysql
[prefix] => Array
(
[default] =>
)
)
[schema:protected] =>
[prefixes:protected] => Array
(
[default] =>
)
[prefixSearch:protected] => Array
(
[0] => {
[1] => }
)
[prefixReplace:protected] => Array
(
[0] =>
[1] =>
)
)
[queryString] => SELECT n.nid AS nid, n.title AS title
FROM
node n
WHERE (n.nid >= :db_condition_placeholder_0)
)
никаких айди и заголовков нет... из знакомого только данные доступа к базе данных..
Комментарии
$query->fields('n', array('nid', 'title'));
$query->condition('n.nid', 5, '>=');
$result = $query->execute()->fetchAllAssocc('nid');
//$result = $query->execute()->fetchAllKeyed();
Тут можешь посмотреть как через while прогнать результат запроса.
в данном случае лучше всего fetchAllKeyed()
а прогнать можно и через foreach
foreach($query->execute() as $result) {
$results[$result['nid']] = $result['title'];
}
Я вас поздравляю, вы столкнулись с итераторами. Преобразовать итератор в массив можно соотв. функцией iterator_to_array(). Но как выше вам уже написали правильнее будет использовать fetchAllAssoc()
Всем спасибо за ответы! теперь понятно.)
не совсем правда понял что за итераторы.. наверно позже дойдет))
зачитался сегодня про drupal api и создание модулей на php-include.ru) хорошо написано)