Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
04.12.2012, 17:23 | #1 |
Guest
Сообщений: n/a
|
Работа с БД на основе API
В чем отличие
$query = $GLOBALS['TYPO3_DB']->SELECTquery( от $res = mysql(TYPO3_db, 'SELECT * FROM mytable WHERE uid=123 AND title LIKE "%blabla%" ORDER BY title LIMIT 5'); И когда что лучше использовать? |
05.12.2012, 13:34 | #2 |
Senior Member
|
1. Логика работы с БД скрыта - это плюс. Используя $GLOBALS['TYPO3_DB'] вы точно уверены, что обращаетесь к нужной базе. А эта база не обязательно может быть MySQL. http://xavier.perseguers.ch/en/tutor...ing-typo3.html
2. Всякие функции вроде SELECTquery() упрощают конструирование запросов и уменьшают вероятность неправильно что-то сделать - забыть эскейпить параметры и т.п. Также в select обычно автоматом добавляются условия видимости записей, которые заданы в TCA (чаще всего это deleted=0 AND hidden=0 + starttime / endtime). 3. Единая точка выполнения запросов к БД тоже бывает полезна. Например для отладки можно допилить эту одну функцию в $GLOBALS['TYPO3_DB'] для подсчета числа запросов к БД на одну страницу, логировать "медленные" (по времени выполнения) или все запросы. В $GLOBALS['TYPO3_DB'] есть и простые функции вроде sql_query() - обертка над mysql_query(). Я обычно использую их для запросов со сложной логикой подзапросов. PS: Для упрощения работы используйте средства IDE! Добавьте в класс переменную: Код:
/** * @var t3lib_DB */ private $db = null; Код:
$this->db = &$GLOBALS['TYPO3_DB']; |
05.12.2012, 16:07 | #3 |
Guest
Сообщений: n/a
|
Понял.
Спасибо. |
05.12.2012, 17:39 | #4 |
Guest
Сообщений: n/a
|
И чисто технический вопрос про выборку.
Вот есть к примеру таблица tt_content - где 40 колонок. Есть ли в принципе существенная разница в скорости работы между SELECT * FROM tt_content и SELECT uid, title FROM tt_content Или это одно и тоже? |
05.12.2012, 17:44 | #5 |
Senior Member
|
Есть существенная разница в объеме возвращаемых данных от mysql в php.
Особенно с учетом того, что в tt_content есть как минимум одно поле BLOB/TEXT - XML содержание FlexForm. Но если у вас небольшая посещаемость (мало запросов в секунду), а в tt_content всего пара тысяч записей - то вряд ли разница будет хоть как-то заметна и измеряема. |
26.12.2012, 15:21 | #6 |
Guest
Сообщений: n/a
|
Вот почему то у меня часто в разных кодах не работает
$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM pages'... именно $GLOBALS['TYPO3_DB']->sql выдает ошибку сервера... В то время как $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $table, $where) работает всегда и везде что делаю не правильно? Спасибо. |
26.12.2012, 19:21 | #7 |
Senior Member
|
Могу предположить что в TYPO3_db что-то нет.
А какую именно ошибку выдает? |
26.12.2012, 20:12 | #8 |
Guest
Сообщений: n/a
|
По-моему 500.
Где - то у меня этот кусок кода работает, а где-то нет... Не пойму почему? |
26.12.2012, 20:18 | #9 |
Senior Member
|
Ну раз "HTTP 500 — Внутренняя ошибка сервера", то это не ошибка работы с MySQL. Смотрите логи апача, вполне возможно что вы обращаетесь к объекту, который не инициализирован, или что-то вроде этого.
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
API ядра TYPO3 - перевод официального руководства | Андрей Аксенов | Мастер-класс | 6 | 26.04.2016 07:45 |
API TYPO3 для стороннего индексатора | razawa | Разработка расширений / TYPO3 extension development | 5 | 24.11.2009 16:12 |
New API Docs package | RSS Bot | Новости TYPO3 (на английском) | 0 | 25.06.2008 19:20 |
DB API | Dutchak Vitaly | Общие вопросы | 3 | 05.10.2005 14:59 |