Написал запрос проще не бывает:
<?php
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1)
->execute();
print_r($nodes);
?>
В итоге вместо результата получаю следующее:
<?php
DatabaseStatementBase Object
(
[dbh] => DatabaseConnection_mysql Object
(
[shutdownRegistered:protected] =>
[target:protected] => default
[key:protected] => default
[logger:protected] =>
[transactionLayers:protected] => Array
(
)
[
driverClasses:protected] => Array
(
[SelectQuery] => SelectQuery
)
[
statementClass:protected] => DatabaseStatementBase
[transactionSupport:protected] => 1
[transactionalDDLSupport:protected] =>
[temporaryNameIndex:protected] => 0
[connectionOptions:protected] => Array
(
[database] => prices
[username] => IShop
[password] =>
[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.type = :db_condition_placeholder_0) AND (n.uid = :db_condition_placeholder_1)
)
?>
Кто знает, почему не выполняется запрос?
Комментарии
<?php
->........
->execute();
->fetchAllAssoc('uid'); ?>
Выдает пустой массив.
<?php
->........
->execute();
->fetchAllAssoc('nid');
?>
И так тоже пустой...:(
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1);
$result=$nodes->execute()->fetchAllAssoc('nid');
print_r($result);
А у вас есть вообще ноды типа "page" созданные uid=1 ?
А вообще в данном случае более правильно
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1)
->execute()
->fetchAllKeyed();
print_r($nodes);
Одна есть точно.
Так тоже пустой массив.
проверьте в таблице наличие записей с такими условиями
в phpmyadmin выполните запрос
SELECT nid,title
FROM node
WHERE type='page' AND uid=1
С таким запросом одна запись нашлась.
А вы где выполняете этот запрос в каком файле или блоке?
В своем модуле.
Через класс EntityFieldQuery запросы работают, через db_select нет.
Что-то глобально сделано не так. В запросе все правильно. Записи такие в базе есть...
А запрос в функции находится или отдельно?
<?php
$nodes = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1)
;
print_r($nodes);
?>
Если сделать так, то создается объект SelectQuery. В нем заданная структура.
Получается, что не выполняется execute().
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1);
$res=$nodes->execute();
while($rec=$res->fetchAssoc()){
echo $rec['nid'].'-'.$rec['title'];
}
http://php-include.ru/stati/database-api-drupal-7rabota-s-bazoi-dannykh-...
->fields('n', array('nid', 'title'))
->condition('n.type', 'page')
->condition('n.uid', 1)
->execute()
->fetchAllKeyed();
print_r($nodes);
в таком случае тоже выполнилось бы - здесь не в этом дело
После выполнения этого кода в переменной $res у меня вместо результата следующее:
<?php
DatabaseStatementBase Object
(
[dbh] => DatabaseConnection_mysql Object
(
[shutdownRegistered:protected] =>
[target:protected] => default
[key:protected] => default
[logger:protected] =>
[transactionLayers:protected] => Array
(
)
[
driverClasses:protected] => Array(
[SelectQuery] => SelectQuery
)
[
statementClass:protected] => DatabaseStatementBase[transactionSupport:protected] => 1
[transactionalDDLSupport:protected] =>
[temporaryNameIndex:protected] => 0
[connectionOptions:protected] => Array
(
[database] => ****
[username] => ****
[password] => ****
[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 titleFROM
node n
WHERE (n.type = :db_condition_placeholder_0) AND (n.uid = :db_condition_placeholder_1)
)
?>
Я же дописал ниже следующее
echo $rec['nid'].'-'.$rec['title'];
}
может попробовать в условия прописать в виде: ->condition('n.uid', 1, '=');
т.е. задать явно аргумент какое именно условие и все должно получиться
Спасибо огромное!!! Все получилось!
Хотя странно все это. В доке написано, что если в condition нет третьего аргумента, то он по умолчанию "=".
Совершенно верно..
Вот функцию api все таки нашел http://api.drupal.org/api/drupal/includes!database!select.inc/function/S...
в соответствии с ней 3-ий аргумент по умолчанию равен NULL
Ну если вы в condition третьим аргументом ничего не введете-то там будет null
$this->where->condition($field, $value, $operator);
return $this;
}
Да,вот этот код,и null в нём не имеет прямого отношения к знаку равенства.
А вот тут написано:
if (!isset($operator)) {
if (is_array($value)) {
$operator = 'IN';
}
elseif (!isset($value)) {
$operator = 'IS NULL';
}
else {
$operator = '='; //вот тут ставится дефолтный знак =
}
}
$this->conditions[] = array(
'field' => $field,
'value' => $value,
'operator' => $operator,
);
$this->changed = TRUE;
return $this;
}