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

Discussion in 'Программирование' started by awerta, Nov 8, 2010.

  1. Offline

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

    Joined:
    Sep 7, 2008
    Messages:
    30
    Likes Received:
    3
    Gender:
    Male
    Код (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 Недавно здесь => Cпециалист <=

    Joined:
    Apr 11, 2009
    Messages:
    423
    Likes Received:
    30
    Gender:
    Male
    для фронт -энда - стоит проверка на корректность данных и меньше вероятноясти что взломают. Только это стоит использовать в WHERE, так же при вставке и апдейте
     
    Last edited: Nov 9, 2010
  4. Offline

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

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

    botanist Активист => Cпециалист <=

    Joined:
    Feb 15, 2009
    Messages:
    461
    Likes Received:
    49
    Gender:
    Male
    Код (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 likes this.
  6. sergiks
    Offline

    sergiks Недавно здесь => Cпециалист <=

    Joined:
    Oct 10, 2010
    Messages:
    362
    Likes Received:
    36
    Gender:
    Male
    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 Недавно здесь

    Joined:
    Sep 7, 2008
    Messages:
    30
    Likes Received:
    3
    Gender:
    Male
    Спасибо огромное за помощь. Все предельно просто и понятно.
     

Share This Page

Loading...