Код (PHP): $jDB = &JFactory::getDBO(); // query $query = 'SELECT ' .$jDB->nameQuote('c.obj_Id').', ' .$jDB->nameQuote('c.char_name').', ' .$jDB->nameQuote('sub.char_obj_id').', ' .$jDB->nameQuote('sub.level').', ' .$jDB->nameQuote('sub.active') далее в том же духе // query $jDB->setQuery($query); Стоит ли прописывать постоянно nameQuote ?
для фронт -энда - стоит проверка на корректность данных и меньше вероятноясти что взломают. Только это стоит использовать в WHERE, так же при вставке и апдейте
Простите за тупость. Можно для идиотов? Указанный выше код из модели фронтенда. Там обычный запрос SELECT a,b,c FROM table1 WHERE a=1 Правильно ли я понимаю, что в данном случае, написание через $jDB->nameQuote('a') кроме проверки правильности формирования имени полей ( и т.п.) других функций не выполняет?
Код (PHP): function nameQuote( $s ) { // Only quote if the name is not using dot-notation if (strpos( $s, '.' ) === false) { $q = $this->_nameQuote; if (strlen( $q ) == 1) { return $q . $s . $q; } else { return $q{0} . $s . $q{1}; } } else { return $s; } } Эта функция ничего, кроме оборачивания имен в апострофы не делает. Не хочешь использовать, пиши апострофы в ручную и все. /libraries/joomla/database/database.php /libraries/joomla/database/database/mysql.php
botanist, тоже хотел привести эту функцию : ) Дополню из недавнего опыта: кто-то не мог понять, почему не получалось вставить строку в #__content, если присутствовало поле fulltext. Без этого поля всё вставлялось на ура. Собственно, дело как раз в том, что вставляли просто Код (CODE): INSERT INTO #__content (introtext, fulltext, ... ) VALUES (... А слово fulltext является зарезервированным словом в MySQL, так что зря поленились заключить в обратные кавычки названия полей, как положено: Код (CODE): INSERT INTO #__content (`introtext`, `fulltext`, ... ) VALUES (... Метод nameQuote() тут бы как раз и помог, к тому же учитывал особенности других, кроме MySQL, баз данных, где вместо обр. кавычек может использоваться другой символ.