Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Zend_Db_Select, проблемы с методом select() 
V
    Опции темы
Gulnaza
Дата 9.4.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



Использую ZendFramework.
не выполняется элементарный запрос
в контроллере:
Код

----
$select = new Zend_Db_Select();
$select->from('obj_titul', array('ob_id','ob_deal','ob_dopinfa','ob_adress'));
$result =$select->query();
$obj = $result->fetchAll();

-----

в temlates:
Код

{foreach from=$obj item=obj} 
<tr>
    <td><input type="checkbox" name="checks[]" value="{$obj->ob_id}"></td>
    <td>{$obj->ob_id}</td>
    <td>{$obj->ob_deal}</td>
        <td>{$obj->ob_dopinfa}</td>
    <td>{$obj->ob_adress}</td>

</tr>
{/foreach}



вообще ничего не выводит. либо выводит ошибку - 
Fatal error: Call to a member function select() on a non-object 
Подскажите пожалуйста в чем может быть проблема
PM MAIL   Вверх
Feldmarschall
Дата 9.4.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Gulnaza, надо спрашивать не "в чем может быть проблема", а "как я могу узнать сам - в чем проблема".
И указывать строку, в которой произошла эта ошибка.

Как в документации написано использовать Zend_Db_Select()?

PM   Вверх
Gulnaza
Дата 9.4.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



все сделано по документации
строка на которую указывает ошибка - #1 при таком варианте: 
Код

$select = $db->select()
        ->from(array('ob' => 'obj_titul'));
$result =$select->query();
        $obj = $result->fetchAll();


Это сообщение отредактировал(а) Gulnaza - 9.4.2008, 14:23
PM MAIL   Вверх
Fortop
Дата 9.4.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



На самом деле ошибка во второй строке

Посмотри, как должен инициализироваться Zend_DB_Select
ты установил Zend_DB_Adapter? 

Код

 Zend_Db_Select  __construct  (Zend_Db_Adapter_Abstract $adapter)

http://framework.zend.com/manual/ru/zend.db.select.html
http://framework.zend.com/apidoc/core/Zend..._Db_Select.html


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
mishaSL
Дата 9.4.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Gulnaza, у вас вообще есть подключение к БД?

Попробуйте так:
Код


<?php
require_once 'Zend/Db.php';

// Автоматически загружает класс Zend_Db_Adapter_Pdo_Mysql
// и создает его экземпляр.
$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));
$select = $db->select();
// ну и дальше, то что у вас...
$select->from('obj_titul', array('ob_id','ob_deal','ob_dopinfa','ob_adress'));
$result =$select->query();
$obj = $result->fetchAll();



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Gulnaza
Дата 9.4.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



mishaSL, подключение к бд конечно же есть в index.php
вот как раз с таким вариантом  - $select = $db->select(); - выползает ошибка на Select()

Добавлено через 10 минут и 56 секунд
Fortop, вот так у меня
Код

 $params = array('host'     => $config->database->hostname,
                    'username' => $config->database->username,
                    'password' => $config->database->password,
                    'dbname'   => $config->database->database);

    $db = Zend_Db::factory($config->database->type, $params);
    Zend_Registry::set('db', $db);
   Zend_Db_Table::setDefaultAdapter($db);

PM MAIL   Вверх
Fortop
Дата 9.4.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Так не пойдет.

Либо нормально код, не кусочками, 

Или еще лучше - вот так
Код

$select = $db->select();

var_dump($select);
die();




Это сообщение отредактировал(а) Fortop - 9.4.2008, 17:42


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gulnaza
Дата 10.4.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



подключение к бд непосредственно перед select() результата не дало...страница сформировалась, а выборка - пустая...var_dump вывел NULL
PM MAIL   Вверх
Fortop
Дата 10.4.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Вывод - у тебя просто не происходит подключение к БД.
проверь наличие коннекта простыми командами

Код

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_list = mysql_list_dbs($link);

while ($row = mysql_fetch_object($db_list)) {
     echo $row->Database . "\n";
}
?> 


если выведет результат - значит разбирайся с подключением через Zend_DB.
Если результата не будет - значит разбирайся с передаваемыми параметрами для сервера и вообще работает ли оный.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gulnaza
Дата 10.4.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



хм..спасибо
var_dump вывел структурированный массив данных
значит дело в выводе информации?



Это сообщение отредактировал(а) Gulnaza - 10.4.2008, 14:19
PM MAIL   Вверх
Fortop
Дата 10.4.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42



Мда. И что сделано?

Нужно было
1. проверить есть ли подключение к БД
2а. Если подключение есть - разбираться с инициализацией Zend_DB
2б. Если подключения нет - разбираться почему его нет (т.е. пароль, логин, адрес сервера и т.д., сам сервер работает ли и доступен ли).

Раз привели дамп Zend_DB, я так понимаю подключение все таки есть? (2а)
Если есть - (2а), то берем пример который давал mishaSL, и проверяем, что выдаст var_dump(get_class($select)) в нем. Если выдает имя - значит все ок. если не выдает, то 2б smile

Код

<?php
require_once 'Zend/Db.php';
// Автоматически загружает класс Zend_Db_Adapter_Pdo_Mysql
// и создает его экземпляр.
$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));
$select = $db->select();
var_dump(get_class($select));

Примечание, никаких чтений из config - все параметры установить руками.

А вообще - Как отлаживать скрипты


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gulnaza
Дата 10.4.2008, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



спасибо за помощь
с подключением все норм
буду разбираться дальше.
PM MAIL   Вверх
Gulnaza
Дата 10.4.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2008

Репутация: нет
Всего: нет



всем огромное спасибо
ошибка оказалась в выводе в templates

Код

{foreach from=$obj item=obj} 
<tr>
    <td><input type="checkbox" name="checks[]" value="{$obj->ob_id}"></td>
    <td>{$obj.ob_id}</td>
    <td>{$obj.ob_deal}</td>
        <td>{$obj.ob_dopinfa}</td>
    <td>{$obj.ob_adress}</td>
</tr>
{/foreach}


Это сообщение отредактировал(а) Gulnaza - 10.4.2008, 15:43
PM MAIL   Вверх
shadowoflion
Дата 1.7.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.3.2011

Репутация: нет
Всего: нет



Решила задать вопрос здесь поскольку темa подобна. Вопрос относительно Zend_Db_Adapter. Пишу сейчас аплоад фото в базу и возник такой вопрос: надо ли переписывать класс Zend_Db_Adapter_Pdo_Mysql чтобы можно было добавлять блоб типы даных?
PM MAIL   Вверх
NFL
Дата 6.7.2011, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Код

<?php
require_once 'Zend/Db.php';
// Автоматически загружает класс Zend_Db_Adapter_Pdo_Mysql
// и создает его экземпляр.
$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));
$select = $db->select();
var_dump(get_class($select));


Что это за извращение? smile 

Или занд уже перестал Autoloader поддерживать?;)
application.ini:
Код

resources.db.adapter = PDO_MYSQL
resources.db.params.host = Хост
resources.db.params.username = Юзер
resources.db.params.password = праоль
resources.db.params.dbname = имя_БД
resources.db.params.charset = utf8

Код


class Application_Model_orderHistory_Table extends Zend_Db_Table_Abstract {

    protected $_name = 'gs_order_status';
    protected $_primary = 'id';
        /**
         *
         * @param string $orderId - ID заказа, историю которого необходимо получить
         * @return array
         */
    public function getOrderHistory($orderId) {
        $db = $this->getAdapter();
        $select = $db->select();
        $history = $select->from($this->_name)->where('order_id = ?', $orderId)
                ->joinLeft('gs_transaction_statuses', 'gs_transaction_statuses.status = gs_order_status.status')
                ->query()->fetchAll();
        return $history;
    }
}


это кусочек из проекта, но если вам неохота заморачиваться с моделями - 

Код

        $db = new Zend_Db_Select(Zend_Db_Table::getDefaultAdapter());
        $select = $db->from($name)->join($name, $cond)->where($cond)->order($spec)->query()->fetchAll();


Без всяких там фабрик smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1613 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.