ФорумПрограммированиеPHP для идиотов → Опять зеднохрень или я туплю!!?

Опять зеднохрень или я туплю!!?

  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 10 июня 2010 г. 14:58

    Короче есть у шлюза таблицы объект запроса, в который можно вставлять фильтры так:
    $select->where('user_id = ?', $user_id);

    protected function _where($condition, $value = null, $type = null, $bool = true)

    Казалось бы всё нормально. Но когда $user_id === null то великий зенд думает, что параметров к фильтру нету и есть только первый параметр в методе, т.е $condition.
    Так вот получается, что если $user_id === null параметр не добавляется
            if ($value !== null) {
    $condition = $this->_adapter->quoteInto($condition, $value, $type);
    }

    , а так как в $condition стоит ? то вываливается умилённая какашка типа Mysqli statement execute error : No data supplied for parameters in prepared statement
    Толи я чёто не пойму, толи одно из двух. Что надо ручками прописывать каждый раз приводить в !== null? Да это было бы очень по тупому как для зенда!
    Спустя 232 сек.
    NRG, я знаю ты должен знать ;)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 июня 2010 г. 15:06, спустя 8 минут 10 секунд

    kostyl, if($user_id) $this->where .. не?)
    Сапожник без сапог
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 10 июня 2010 г. 15:09, спустя 3 минуты 6 секунд

    фиг знает…
    Спустя 42 сек.
    это дофига чего так надо проверять…
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 10 июня 2010 г. 15:18, спустя 9 минут 1 секунду

    тем более что надо по-любому фитровать, а не только если есть ид
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 июня 2010 г. 15:19, спустя 52 секунды

    kostyl, то есть такой вариант тебе кажется гавном? :)
    Сапожник без сапог
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 10 июня 2010 г. 15:49, спустя 30 минут 2 секунды

    phpdude, не скажу что гавном, так можно делать. Можно еще так делать where('user_id = ?', (int)$user_id), хотя твой наверно лучше.
    Спустя 84 сек.
    пиздец почему нельзя было сделать два метода whereCond($condition) и whereParam($condition, $value)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 июня 2010 г. 16:03, спустя 13 минут 54 секунды

    kostyl, кт омешает унаследовать класс и вписать туда иф? :) вливайся, это мир ооп!)
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 июня 2010 г. 20:33, спустя 4 часа 29 минут 31 секунду

    kostyl, в этой оболочке БД есть возможность посмотреть конечный сформированный запрос?
    NULL это очень особенный случай и работать с ним надо аккуратно. надо выяснить две вещи:
    1. колонка в таблице объявлена как содержащая NULL?
    2. не преобразует ли оболочка пэхапэшный NULL в сиквельный 0 ?

    Вообще правильный ANSI синтаксис запросов такой: WHERE field IS NULL
    ιιlllιlllι унц-унц
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 11 июня 2010 г. 1:54, спустя 5 часов 21 минуту 4 секунды

    кт омешает унаследовать класс и вписать туда иф? :) вливайся, это мир ооп!)

    Та отож… :) Не могли распарсить строку и посмотреть если ли параметр или нет. А я еще думал сертификат получить о Зенд (не по фреймворку). Та манал я.

    artoodetoo, причем тут запрос? Оболочке хочется сделать bindParam а его нету, потому как null за параметр не посчитался, а ? есть. Ну это как я понял.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 июня 2010 г. 4:55, спустя 3 часа 1 минуту 4 секунды

    ты не выебывайся, а ищи.
    ιιlllιlllι унц-унц
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 11 июня 2010 г. 5:00, спустя 5 минут 41 секунду

    artoodetoo, что искать то?
    Спустя 26 сек.
    почему не выёбываться то?
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 11 июня 2010 г. 5:14, спустя 13 минут 14 секунд

    конечный текст запроса
    Спустя 219 сек.
    ты что думаешь zend изобрел свой sql? он блядь из всех этих ужасных хуй->where() составляет обычный запрос. и скармливает его драйверу БД.
    подозреваю, что он умеет работать с разными драйверами. для pdo биндит параметры, а для прочих делает вид, что биндит, а на самом деле вклеивает в строку.
    Спустя 155 сек.
    Казалось бы всё нормально

    убедись в этом. найди какой текст он передает на выполнение драйверу
    Спустя 152 сек.
    Zend_Db is a layer which sits above the native PDO database extension.

    о, только PDO. тогда надо выяснить как он поступает с NULL
    Спустя 236 сек.
    читать http://phpclub.ru/mysql/doc/problems-with-null.html

    затем перечитать
    NULL это очень особенный случай и работать с ним надо аккуратно. надо выяснить две вещи:
    1. колонка в таблице объявлена как содержащая NULL?
    2. не преобразует ли оболочка пэхапэшный NULL в сиквельный 0 ?

    Вообще правильный ANSI синтаксис запросов такой: WHERE field IS NULL

    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 11 июня 2010 г. 7:24, спустя 2 часа 10 минут 37 секунд

    вообще насколько я понимаю, нужно избегать использовать NULL, да?
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 11 июня 2010 г. 7:35, спустя 10 минут 50 секунд

    artoodetoo, ты на приколе? я посмотрел как код работает, а потом написал тут вопрос! я что с нул никогда запросы не писал?
    я ж тебе говорю, что он пытается сделать prepare запросу, в котором стоит ?, но параметров нету, так как в методе _where стоит $value = null, что ровным счетом означает, что нельзя писать ? если передаешь null или ничего не передаешь в $value. Естественно возникает Mysqli statement execute error : No data supplied for parameters in prepared statement при запуске запроса, так как
    if ($value !== null) {
    $condition = $this->_adapter->quoteInto($condition, $value, $type);
    }

    это условие не добавляет параметры если значение пришло равное null !
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 11 июня 2010 г. 7:38, спустя 2 минуты 45 секунд

    кароче - Zend.Db* - гавнище. То ли дело доктрина какая-нить

Пожалуйста, авторизуйтесь, чтобы написать комментарий!