Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 12 Ответов
  • 2538 Просмотров
*

Mick_20

  • Завсегдатай
  • 1002
  • 3 / 0
  • Что тут писать?
last_insert_id
« : 06.04.2014, 17:35:17 »
Как использовать last_insert_id()  в Joomla 2.5   ?
Либо в переменную записать полученный id
либо сразу в следующий запрос подставить.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Re: last_insert_id
« Ответ #1 : 06.04.2014, 18:07:39 »
вопрос довольно странный, видимо это зависит от поставленной задачи)
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: last_insert_id
« Ответ #2 : 07.04.2014, 00:42:19 »
Если используете JTable то после store в поле id будет нужное вам значение
пример:
Код: php
class myTable extends JTable
{
public function __construct( $db )
{
parent::__construct( '#__table_name', 'id', $db );
}
}

$table = new myTable( JFactory::getDbo() );
$table->title = 'lalal';
$table->store();
echo $table->id; //тут и будет наш last_insert_id

Если же хотим через обычный запрос после вставки то:
Код: php
$db = JFactory::getDbo();
$db->setQuery('ЗАПРОС НА ВСТАВКУ')->execute();
echo $db->insertid();//тут и будет наш last_insert_id
*

Mick_20

  • Завсегдатай
  • 1002
  • 3 / 0
  • Что тут писать?
Re: last_insert_id
« Ответ #3 : 07.04.2014, 08:01:50 »
Ой а у меня запрос н вставку не такой как во втором варианте. Так использовать?

                        
Код: php
$query = $db->getQuery(true);
$query = "INSERT INTO  `#__names`
(`id`, `title`, `user_id`)
VALUES ('', '{$wname}', '{$userid}');";
$db->setQuery( $query );
$db->query();
                        $last_id = $db->insertid();
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: last_insert_id
« Ответ #4 : 07.04.2014, 11:35:55 »
Ой а у меня запрос н вставку не такой как во втором варианте. Так использовать?
Да все верно!
*

Mick_20

  • Завсегдатай
  • 1002
  • 3 / 0
  • Что тут писать?
Re: last_insert_id
« Ответ #5 : 07.04.2014, 14:09:10 »
спасибо за помощь)
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: last_insert_id
« Ответ #6 : 07.04.2014, 14:42:47 »
спасибо за помощь)
Кстати вот это:
Код: php
$query = $db->getQuery(true);
$query = "INSERT INTO  `#__names`
(`id`, `title`, `user_id`)
VALUES ('', '{$wname}', '{$userid}');";
Запись неверная!
$query = $db->getQuery(true); - эта строка лишняя! Она нужна если вы запрос будете строить в объектном стиле! Пример:
Код: php
$query = $db->getQuery(true);
$query->insert('#__names( `title`, `user_id`)')->values($db->quote($wname). ', ' . $db->quote($userid));
$db->setQuery( $query )->query();
$last_id = $db->insertid();
*

Mick_20

  • Завсегдатай
  • 1002
  • 3 / 0
  • Что тут писать?
Re: last_insert_id
« Ответ #7 : 14.04.2014, 17:47:56 »
Огромное спасибо)) У меня эта строка встречается на всех моих сайтах(
А что она делает?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Re: last_insert_id
« Ответ #9 : 14.04.2014, 18:13:03 »
Огромное спасибо)) У меня эта строка встречается на всех моих сайтах(
Как и сказал Дима эта строка для получения объекта класса JDatabaseQuery! Этот класс служит для того что бы строить запросы в объектном стиле!
тоесть не так как вы написали:
Код: php
query = $db->getQuery(true);
$query = "INSERT INTO  `#__names`
(`id`, `title`, `user_id`)
VALUES ('', '{$wname}', '{$userid}');";

а так как я писал:
Код: php
$query = $db->getQuery(true);
$query->insert('#__names( `title`, `user_id`)')->values($db->quote($wname). ', ' . $db->quote($userid));
*

Mick_20

  • Завсегдатай
  • 1002
  • 3 / 0
  • Что тут писать?
Re: last_insert_id
« Ответ #10 : 14.04.2014, 18:33:10 »
Понятно) А зачем писать в объектном стиле? Защита от инъекций или??
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

Beer

  • Завсегдатай
  • 1094
  • 41 / 1
  • БИРУ - БИР!
Re: last_insert_id
« Ответ #12 : 06.01.2020, 01:35:28 »
Использовал как мануал для пересчета записей в БД используя неск. проследовательных запросов создав в корне файл test.php

Код
$db->setQuery('INSERT INTO #__joomgallery_comments ( cmtpic, cmttext, published, approved ) SELECT #__joomgallery.id AS _2, #__joomgallery.hits - #__joomgallery.hits_2 AS _1, 1 AS _4, 1 AS _5 FROM #__joomgallery LEFT JOIN #__joomgallery_comments ON #__joomgallery.id = #__joomgallery_comments.cmtpic WHERE (((#__joomgallery.hits - #__joomgallery.hits_2)>0)) ORDER BY #__joomgallery.hits - #__joomgallery.hits_2 DESC LIMIT 12')->execute();

При обращении к https://сайт.ru/test.php происходит чтение и запись в БД.

Когда я выполняю несколько запросов к БД последний  запрос UPDATE не выполняется.
Но если между запросами ставлю
Код
sleep(1);
Записи в БД добавляются. Это правильное решение?

Куда положить мой файл test.php чтобы к нему сделать доступ через cron?
Если положу на уровень выше - подключение к БД сохранится?
« Последнее редактирование: 06.01.2020, 01:40:18 от Beer »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться