FA-18_Hornet_breaking_sound_barrier

Когда вы обозреваете множество кода, вы часто удивляетесь, почему что-то было написано так как было. Особенно когда делаются дорогие запросы в базу данных, я все еще вижу вещи, которые могут и должны быть улучшены.

Читать далее

Вопрос, который я задал в предыдущем посте продублировал на 5 форумов. Все форумы тематические, по PHP. Зачем я это сделал?

  1. Найти ответы.
  2. Проверить эти форумы на активность и юзабельность.

В итоге ответы нашел сам, в чужом коде. А о форумах выводы сделал.

Ответы были крайне просты. Надо было мне внимательнее читать документацию. Последний ид оказался свойством самого класса PDO.
http://ru.php.net/manual/ru/pdo.lastinsertid.php

А кол-во последних измененных строк получаются по методу стейтмента
http://ru.php.net/manual/ru/pdostatement.rowcount.php

Теперь о форумах:

http://www.php.ru/forum/ — не получил ответа. вообще никакого ответа, т.е. низкая активность?
http://phpclub.ru — сначала пытаются троллить, вместо диалога, потом наводками. в итоге ответ написал я сам. так же не понравился дизайн, добавление ответа через аякс.
хотя позже диалог завязался, подтянулись участники, меняю мнение.

Форум Школы Программирования — мертвый.

http://phpforum.ru — тут то и увидел код, натолкнувший на ответ. понравилось у них, особенно дизайн.
http://pyha.ru/forum/ — наверное зе бест. и дизайном и атмосферой. чего только стоит оценка  ответов — ХУЙНЯ, а форум новичков назван «для идиотов»

В итоге я смогу закончить работу над своим драйвером и использовать его постоянно в ядре сайтов.

php pdo

Решил сделать драйвер БД через PDO. С mydql напрямую все просто и однозначно, но не с PDO.
Возникло пару вопросов.

Драйвер должен состоять всего из 4-х ф-й : select, insert, update, delete. Логика их работы не имеет значения. Вызов просто $this->db->select(); в чем и профит.

У PDO есть ф-я query() которая просто для select и возвращает стейтмент, который можно потом fetch(). А что если в селекте есть параметры? Их же надо экранировать. Использовать sprintf() в связке с mysql_real_escape_string() когда речь идет о PDO не кошерно.

Сначала я написал ф-ю

И завис. Как же быть с параметрами? Для экранирования в PDO используется ф-я prepare(), куда передается sql запрос с параметрами WHERE например ‘id = :id ‘. Далее делаем bindParam(‘:id’, $my_id); и выполняем execute().
Хорошо, можно переписать мою ф-ю иначе:

Но тогда надо помнить всегда про PDO, передавать sql в формате типа ‘:id’ и параметры array( «id» => $id);
Есть ли какое-то более элегантное решение?

И что делать с запросами Insert и Update где я хочу узнать кол-во измененных столбцов? execute() возвращает true или false.
Можно использовать exec() но снова — как тогда быть с параметрами?

Автор 27 Апрель 2011 | Дмитрий Андреев, собственно я спер у него.

На днях решил разобраться с php PDO. Это интересно и необходимо изучать новые технологии. Русской документации нигде не нашел, потому и решил выложить. Надеюсь эта статья будет Вам интересна.

Читать далее