maxru
МИФИст
Получение значения первичного ключа после INSERT.
Есть класс Good, инкапсулирующий в себе данные о товаре.
Например:
good_id, good_name и good_price (для простоты оставим 3 поля).
Есть метод, обеспечивающий сохранение информации о товаре в БД.
Если good_id целое число, то происходит UPDATE, если good_id == false, то происходит попытка
вставки новой записи в БД.
После вставки нужно обновить поле good_id значением автоматически присвоенном БД этому полю при вставке записи.
(good_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY)
Додумался только до этого:
Но мне почему-то кажется, что есть определенная вероятность, что между запросом 1 (INSERT) и запросом 2 (SELECT) может произойти еще один или несколько INSERT'ов и я получу в результате "чужой" good_id.
Так как получить good_id, добавленный именно в результате МОЕГО запроса INSERT, а не оного, произведенного из другой копии скрипта?
Есть класс Good, инкапсулирующий в себе данные о товаре.
Например:
good_id, good_name и good_price (для простоты оставим 3 поля).
Есть метод, обеспечивающий сохранение информации о товаре в БД.
Если good_id целое число, то происходит UPDATE, если good_id == false, то происходит попытка
вставки новой записи в БД.
После вставки нужно обновить поле good_id значением автоматически присвоенном БД этому полю при вставке записи.
(good_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY)
Додумался только до этого:
PHP:
private function _insert()
{
$Database = Database::getInstance();
$query = "INSERT INTO `goods` (`good_name`, `good_price`) VALUES ('".$this->getGoodName()."', ".$this->getGoodPrice().")";
$result = $Database->doQuery($query);
if($result->size() != 0)
{
return false;
}
$query = "SELECT MAX(`good_id`) as `last_good_id` FROM `goods`";
$result = $Database->doQuery($query);
if($result->size() != 0)
{
$row = $result->fetch();
$this->setGoodId($row['last_good_id']);
}
return true;
}
Так как получить good_id, добавленный именно в результате МОЕГО запроса INSERT, а не оного, произведенного из другой копии скрипта?