Как получить безопасный для сеанса Insert_id после запроса INSERTPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как получить безопасный для сеанса Insert_id после запроса INSERT

Сообщение Anonymous »

У меня есть несколько учетных записей пользователей, и каждая из них использует добавочный набор целых чисел для своих собственных транзакций.

Итак, каждый раз, когда пользователь открывает транзакцию, я запрашиваю последнюю максимальную цифру в его транзакции и плюс 1.

Но иногда я обнаруживал, что результат возвращает максимальный идентификатор из транзакции другого пользователя. Предположительно, последний идентификатор пользователя A = 5402, а последний идентификатор пользователя Z = 19201. Иногда пользователь A получает 19202 вместо 5403.

Это мой запрос:

SELECT MAX(CAST(id AS UNSIGNED)) as max_id FROM `transaction` WHERE `user_id` = 'A'


Таблица транзакций имеет следующий вид:
id INT PK
user_id INT
... и т. д.

Это веб-приложение, к которому одновременно подключаются несколько пользователей, и я использую mysql в качестве базы данных и php в качестве языка программирования.

Я использую CI, вот код, который я использую для получения максимального идентификатора

function get_max($table, $max_col, $col_id = NULL, $id = NULL) {
if (!empty($col_id) && !empty($id)) {
$this->db->where($col_id, $id);
}
$this->db->select("MAX(CAST($max_col AS UNSIGNED)) as max_$max_col");
$query = $this->db->get($table);

if ($query->num_rows() > 0) {
return intval($query->row_array()["max_$max_col"]);
}
return 0;
}


После получения идентификатора я вставляю его, как показано ниже:

$new_data['id'] = $this->model_share->get_max('transaction', 'id', 'user_id', $user_id) + 1;
$new_data['user_id'] = $user_id;

$this->model_share->insert('transaction', $new_data); // save data


а это деталь функции вставки

function insert($table, $data) {
$this->db->insert($table, $data);

$id = $this->db->insert_id();
if ($id db->affected_rows() > 0;
else return $id;
}


Подробнее здесь: https://stackoverflow.com/questions/457 ... sert-query
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»