Joomla 1.5 nameQuote [как правильно использовать]

Тема в разделе "Программирование", создана пользователем awerta, 08.11.2010.

  1. Offline

    awerta Недавно здесь

    Регистрация:
    07.09.2008
    Сообщения:
    30
    Симпатии:
    3
    Пол:
    Мужской
    Код (PHP):
    1. $jDB = &JFactory::getDBO();
    2. // query
    3.             $query =
    4.             'SELECT '
    5.             .$jDB->nameQuote('c.obj_Id').', '  
    6.             .$jDB->nameQuote('c.char_name').', '   
    7.             .$jDB->nameQuote('sub.char_obj_id').', '   
    8.             .$jDB->nameQuote('sub.level').', ' 
    9.             .$jDB->nameQuote('sub.active') 
    10. далее в том же духе
    11. // query           
    12.             $jDB->setQuery($query);


    Стоит ли прописывать постоянно nameQuote ?
     
  2.  
  3. Tureckiy
    Offline

    Tureckiy специалист

    Регистрация:
    11.04.2009
    Сообщения:
    423
    Симпатии:
    30
    Пол:
    Мужской
    для фронт -энда - стоит проверка на корректность данных и меньше вероятноясти что взломают. Только это стоит использовать в WHERE, так же при вставке и апдейте
     
    Последнее редактирование: 09.11.2010
  4. Offline

    awerta Недавно здесь

    Регистрация:
    07.09.2008
    Сообщения:
    30
    Симпатии:
    3
    Пол:
    Мужской
    Простите за тупость. Можно для идиотов?
    Указанный выше код из модели фронтенда.
    Там обычный запрос SELECT a,b,c FROM table1 WHERE a=1
    Правильно ли я понимаю, что в данном случае, написание через $jDB->nameQuote('a') кроме проверки правильности формирования имени полей ( и т.п.) других функций не выполняет?
     
  5. Offline

    botanist специалист

    Регистрация:
    15.02.2009
    Сообщения:
    461
    Симпатии:
    49
    Пол:
    Мужской
    Код (PHP):
    1. function nameQuote( $s )
    2.     {
    3. // Only quote if the name is not using dot-notation
    4.    if (strpos( $s, '.' ) === false)
    5.     {
    6.     $q = $this->_nameQuote;
    7.         if (strlen( $q ) == 1) {
    8.         return $q . $s . $q;
    9.     } else {
    10.     return $q{0} . $s . $q{1};
    11.             }
    12.     }
    13.     else {
    14.     return $s;
    15.     }
    16.     }

    Эта функция ничего, кроме оборачивания имен в апострофы не делает. Не хочешь использовать, пиши апострофы в ручную и все.
    /libraries/joomla/database/database.php
    /libraries/joomla/database/database/mysql.php
     
    awerta нравится это.
  6. sergiks
    Offline

    sergiks специалист

    Регистрация:
    10.10.2010
    Сообщения:
    362
    Симпатии:
    36
    Пол:
    Мужской
    botanist, тоже хотел привести эту функцию : )

    Дополню из недавнего опыта: кто-то не мог понять, почему не получалось вставить строку в #__content, если присутствовало поле fulltext.
    Без этого поля всё вставлялось на ура.
    Собственно, дело как раз в том, что вставляли просто
    Код (CODE):
    1. INSERT INTO #__content (introtext, fulltext, ... ) VALUES (...

    А слово fulltext является зарезервированным словом в MySQL, так что зря поленились заключить в обратные кавычки названия полей, как положено:
    Код (CODE):
    1. INSERT INTO #__content (`introtext`, `fulltext`, ... ) VALUES (...

    Метод nameQuote() тут бы как раз и помог, к тому же учитывал особенности других, кроме MySQL, баз данных, где вместо обр. кавычек может использоваться другой символ.
     
  7. Offline

    awerta Недавно здесь

    Регистрация:
    07.09.2008
    Сообщения:
    30
    Симпатии:
    3
    Пол:
    Мужской
    Спасибо огромное за помощь. Все предельно просто и понятно.
     

Поделиться этой страницей

Загрузка...