Работая с PDO обнаружил такую фишку - все объекты *LOB в оракле он не выбирает при fetch, а вместо этого выдает ссылку на объект типа (stream). Это PHP stream, чтобы его получить нужно выполнить stream_get_contents(). Понятно зачем это сделано, все к оптимизации и удобству, но я бы опционально разрешил вернуть все назад, и выбирать LOB’ы сразу в значения, как это делал например PEAR:DB.
В итоге чтобы выбрать текст новости из поля типа CLOB в Oracle мне пришлось делать так:
function getNewsContent($id) {
$newsq = $this->DBO->prepare("select id,subject,news_body,create_date from news where id=:id");
$newsq->execute(array(":id" => $id));
$newsq->bindColumn(3, $news_body, PDO::PARAM_LOB);
$data = ($newsq->fetch(PDO::FETCH_OBJ));
$data->NEWS_BODY = stream_get_contents($news_body);
return $data;
}
Немного не удобно, но привыкнуть можно.
Кроме того, бился сегодня головой об стену, по поводу того что выбирая фреймворк не наткнулся на Kohana
Она еще конечно сильно бета, но этот фреймворк по заявкам разработчиков - именно то что мне нужно. Там и PDO, там и memcached… Эх, вот всегда так…
Вы все еще полагаете что в мануале CodeIgniter’а не врут о том что метод $this->db->escape(); спасет вас от Sql Injection?
Учитывая что содержание этого метода в драйвере для Oracle
function escape_str($str)
{
return $str;
}
Доверяй, но проверяй :))
Решился таки делать большой проект с использованием готового фреймворка, чтобы не возиться с написанием с нуля, т.к. сроки сильно жмут, а своё хочется идеально спроектировать, на что конечно нужно кучу времени.
Первые впечатления такие:
Пока вроде все впечатления, будут еще - обязательно напишу :) Две мысли пока в голове - надо пока не поздно написать своё попроще, потому что и так большую часть переписываю и думаю надо было всетаки сравнить CI с ZendFramework - что-то мне подсказывает что Zend хоть и еще более монстрообразный, но сделан во многом логичнее.
Ну вот я и в москве.
Не в первый раз конечно, но впечатлений как всегда море. Большой, красивый, современный город. Супер.
По Хайлоаду:
Кроме того, в москве сейчас 4:20 утра, мы сидим в отличном мексиканском баре Pancho Villa, пьем пиво, употребляем мексиканские закуски, все просто супер. Кстати Шоколадница вообще не рулит ни разу - час интернета с весьма посредственной скоростью - 50 рублей. В панчо вилла офигенный интернет абсолютно бесплатно.
Нет, и всетаки я люблю этот город :)
В очередной попытке попробовать linux в качетсве десктопа меня ожидал огромный успех: Ubuntu linux прекрасно прижился у меня на ноутбуке а теперь и на рабочую машину просится :) Реально думаю поставить, пугает только то что фотошоп под wine страшно глючит, и к новым текстовым редакторам привыкать прийдется.
А в целом очень удобная, стабильная и юзабельная система.
P.S. Если у кого-то будут проблемы с установкой на DELL Inspiron 1520 - cтучите в аську, помогу чем смогу. Сам дня два железо настраивал…
Сегодня впервые опробовал memcached (”мемкешди” в русской транскрипции). Эффект офигенный. Я разрабатывал онлайн просмотрщик биржевых торгов, который просто обновлял HTML страницу с выбранными инструментами с определенной периодичностью. Основная засада была в том что минимальный период - 3 секунды, а таких пользователей сейчас может быть до сотни. Таким образом получаем 300 запросов в три секунды, т.е. где-то 100 запросов к базе в секунду. А запрос довольно немаленький на самом деле.
Решилось все очень просто - кешированием запросов которые выполняются с периодичностью в 15 секунд и более. Изменения в коде - минимальные. Пришлось запросы к базе делать через маленький метод такого рода:
function getCachedQuery($query, $ttl=30) {
global $_memcache, $db; //$db здесь - объект PEAR::MDB2
if(!isset($_memcache)) {
$_memcache = new Memcache;
$_memcache->connect('localhost', 11211) or die ("Could not connect");
}
$md5_q_txt = md5($query);
if($_memcache->get($md5_q_txt)) {
$q = $_memcache->get($md5_q_txt);
}
else {
$q = $db->queryAll($query, '', MDB2_FETCHMODE_ASSOC);
$_memcache->add($md5_q_txt, $q, false, $ttl);
}
Return $q;
}
Вот такой вот несложный код заставит ваше интернет приложение задышать поновому :))
Так и не могу решить, чем верстать большой долговременный проект, который потом самому сопровождать:
С одной стороны идеально было бы сверстать на CSS+DIV, но с другой стороны старые добрые таблицы ведут себя гораздо предсказуемее… А учитывая что структура проекта и его дальнейшие перспективы неизвестны - как верстать всетки непонятно…
Ссылка на тему: http://positioniseverything.net/
Жгущий журнал Smashing Magazine радует очередной отличной статьёй
Хорошая статья на тему дизайна сайтов в стиле web2.0. Таких “мануалов” куча, но тут собрано больше всего аспектов и описание, почему это работает с точки зрения пользователя.