goDB 1.1.3

После года разгильдяйничества, решил снова заняться своей библиотечкой для работы с MySQL.

Изменения в версии 1.1.3 незначительны, но, надеюсь, что вскоре будет что-нибудь поинтереснее.

Плейсхолдер ?e

?e — экранированная (escape) часть строки. В отличии от простого ? (целая строка) не заключается в кавычки.

Пример:

$search  = '"Пыха" рулит';
$pattern = 'SELECT * FROM `table` WHERE `text` LIKE "%?e%"';
$data    = array($search);
$db->query($pattern, $data, 'assoc'); // SELECT * FROM `table` WHERE `text` LIKE "%\"Пыха\" рулит%"

Плейсхолдер ?q

?q — часть запроса. Вставляется напрямую без каких-либо изменений. Если нужно составить запрос из нескольких строк, а конкатентацию использовать не хочется.

$where = '`col`=12';
 
$pattern = 'SELECT * FROM `table` WHERE ?q ORDER BY `id` DESC';
$data    = array($where);
$db->query($pattern, $data, 'assoc'); // SELECT * FROM `table` WHERE `col`=12 ORDER BY `id` DESC';

Можно сделать с конкатентацией:

$pattern = 'SELECT * FROM `table` WHERE '.$where.' ORDER BY `id` DESC';

Отличие в том, что при конкатентации $where станет частью шаблона и в нём могут присутствовать плейсхолдеры. При вставке через ?q никакой обработки значения не будет.

Метод countRows()

$db->countRows(string $table [, string $where [, array $data])Получение количества строк в таблице.

Узкоспециализированные методы, конечно, не приветствуются, но слишком часто приходится писать одно и тоже.

$db->countRows('table');                       // SELECT COUNT(*) FROM `table`
$db->countRows('table', '`id`>10');            // SELECT COUNT(*) FROM `table` WHERE `id`>10
$db->countRows('table', '`id`>?i', array(10)); // SELECT COUNT(*) FROM `table` WHERE `id`>10

@todo: длинные плейсхолдеры

По сравнению с изначальной версией плейсхолдеров расплодилось: ?, ?i, ?n, ?s, ?v … Чёрт ногу сломит. В следующей версии собираюсь сделать «длинные» эквиваленты существующих:

?s - ?set
?v - ?values
?t - ?table
...

Все предложения по этому и другим поводам можно оставлять здесь или на Пыхе.

10 комментариев »

  • Спасибо

    dallone, 1.06.2010, 21:00

  • dallone, нема за що.

    vasa_c, 1.06.2010, 21:02

  • countRows() излишен…
    лучше бы сделал чтобы можно было использовать несколько раз одну и туже переменную

    goDB::queryDB(»
    INSERT INTO table (field) VALUES (?1) ON DUPLICATE KEY UPDATE field = ?1″,
    array($var)
    );

    adw0rd, 1.06.2010, 22:42

  • По мне, параметры должны быть именованными. Так читабельнее.
    «SELECT u.* FROM users AS u WHERE u.id=:userid»

    artoodetoo, 2.06.2010, 5:27

  • А откуда брать этот «:userid»? Передавать данные ассоциативным массивом? В большинстве случаев от этого, имхо, будет больше гемороя, чем читабельности. Хотя как дополнительный вариант можно попробовать сделать.

    vasa_c, 2.06.2010, 9:51

  • adw0rd>> лучше бы сделал чтобы можно было использовать несколько раз одну и туже переменную
    С именованными параметрами это решается само.

    @vasa_c: Ну да, ассоциативный массив и/или методы вроде bind(name, value)

    artoodetoo, 2.06.2010, 13:18

  • а как же холдер ?m

    CTAPbIu_MABP, 25.06.2010, 17:43

  • CTAPbIu_MABP, а что это?

    vasa_c, 25.06.2010, 19:34

  • как что это сокращение для ?mabp

    CTAPbIu_MABP, 25.06.2010, 19:42

  • Никаких Мавров в запросах!
    Они всю базу порушат.

    vasa_c, 25.06.2010, 21:56

Leave a comment