powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP/MySQL(Транзакции)
8 сообщений из 8, страница 1 из 1
PHP/MySQL(Транзакции)
    #37726996
techncode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем. Есть такая задача, на пример при добавлении нового пользователя в базу произвести еще какие то действия.. В общем я написал элементарный кусочек кода, думаю он будет понятен всем...

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
<?php
$connect = mysql_connect('localhost', 'root', '');
$db = mysql_select_db('mysql_test', $connect);
function SQL($sql){return mysql_query($sql);};

$st_trans = SQL("START TRANSACTION");
if($st_trans)
	echo '1
';
$add_user = SQL
("
	INSERT INTO `users` VALUES
	(
		null,
		111,
		222,
		'email',
		'salt'
	)
");
if(mysql_affected_rows() == 1)
{
	$rollback = SQL("ROLLBACK");
	if($rollback)
		echo 2;
}
// Выводит 1 и 2. Запись добавлена...
?>



При добавлении записи пытаюсь сделать ROLLBACK, но запись всеравно добавляется в базу. Это все дело пробовал на денвере. Подскажите в чем дело. С транзакциями дело имею впервые.
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727013
techncode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В консоли все получается, а вот с PHP не знаю что и думать...
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727077
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
techncodeВ консоли все получается, а вот с PHP не знаю что и думать...
SQL('SET AUTOCOMMIT=0');
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727095
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
techncode, запросы из консоли и из PHP делаются к одной и той же базе? Спрашиваю потому что судя по документации разные движки в MySQL по разному реализуют поддержку транзакций - Transactions and Atomic Operations . Соответственно, если у тебя разные БД, то и результаты могут быть разными. Имеет также смысл проверить какой режим/движок для конкректных таблиц установлен.

Я бы добавил четвертый параметр - true - к mysql_connect, чтобы заставить открывать новое соединение каждый раз потому что я не уверен каким образом соединение "делится" между скриптами без него. Разумеется надо не забыть закрыть его в конце. И также надо во всех вызовах mysql_* функций использовать переменную $connect.

Можешь попробовать SET AUTOCOMMIT=0 перед START TRANSACTION вызвать. Хотя документация утверждает что вызов START TRANSACTION подразумевает отключение AUTOCOMMITа.
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727261
techncode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baziletechncode, запросы из консоли и из PHP делаются к одной и той же базе? Спрашиваю потому что судя по документации разные движки в MySQL по разному реализуют поддержку транзакций - Transactions and Atomic Operations . Соответственно, если у тебя разные БД, то и результаты могут быть разными. Имеет также смысл проверить какой режим/движок для конкректных таблиц установлен.

Я бы добавил четвертый параметр - true - к mysql_connect, чтобы заставить открывать новое соединение каждый раз потому что я не уверен каким образом соединение "делится" между скриптами без него. Разумеется надо не забыть закрыть его в конце. И также надо во всех вызовах mysql_* функций использовать переменную $connect.

Можешь попробовать SET AUTOCOMMIT=0 перед START TRANSACTION вызвать. Хотя документация утверждает что вызов START TRANSACTION подразумевает отключение AUTOCOMMITа.

bazile ты прав, В MyISAM не работает а в InnoDB пошло даже без AUTOCOMMIT=0. Спасибо!
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727316
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ бы добавил четвертый параметр - true - к mysql_connect, чтобы заставить открывать новое соединение каждый раз потому что я не уверен каким образом соединение "делится" между скриптами без него. Разумеется надо не забыть закрыть его в конце. И также надо во всех вызовах mysql_* функций использовать переменную $connect.
Если на все приложение используется одно подключение, то все это не нужно.
Между тем более 1 соединение использовано быть не может.
Закрывать тоже имеет смысл если понимаешь зачем это нужно.
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727371
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторMyISAM
Если почитать документации по транзакциям в MySQL...
...
Рейтинг: 0 / 0
PHP/MySQL(Транзакции)
    #37727526
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
techncode bazile ты прав, В MyISAM не работает а в InnoDB пошло даже без AUTOCOMMIT=0. Спасибо!
Нынче самый любимый вопрос на собеседованиях: чем отличается MyISAM от InnoDB
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP/MySQL(Транзакции)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]