[РЕШЕНО] api базы данных

Аватар пользователя g2100636 g2100636 28 августа 2013 в 22:36

Никак не могу разобраться как работают запросы к базе данных.
подскажите пожалуйста что делают запросы.. как их использовать.. вот везде приводятся подобные примеры:

<?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>';
?>

в итоге выводится такая штука:

DatabaseStatementBase Object
(
    [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)
)

никаких айди и заголовков нет... из знакомого только данные доступа к базе данных..

Комментарии

Аватар пользователя drupby drupby 28 августа 2013 в 23:02
$query = db_select('node', 'n');
$query->fields('n', array('nid', 'title'));
$query->condition('n.nid', 5, '>=');
$result = $query->execute()->fetchAllAssocc('nid');
//$result = $query->execute()->fetchAllKeyed();
Аватар пользователя drupby drupby 29 августа 2013 в 15:14

"Chyvakoff" wrote:
можешь посмотреть как через while прогнать результат запроса.

в данном случае лучше всего fetchAllKeyed()
а прогнать можно и через foreach

$results=array();
foreach($query->execute() as $result) {
  $results[$result['nid']] = $result['title'];
}
Аватар пользователя deb deb 29 августа 2013 в 16:57

Я вас поздравляю, вы столкнулись с итераторами. Преобразовать итератор в массив можно соотв. функцией iterator_to_array(). Но как выше вам уже написали правильнее будет использовать fetchAllAssoc()

Аватар пользователя g2100636 g2100636 31 августа 2013 в 22:50

Всем спасибо за ответы! теперь понятно.)
не совсем правда понял что за итераторы.. наверно позже дойдет))

зачитался сегодня про drupal api и создание модулей на php-include.ru) хорошо написано)