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

Код: 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
28.03.2012, 11:26:14
    #37727013
techncode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
В консоли все получается, а вот с PHP не знаю что и думать...
...
Рейтинг: 0 / 0
28.03.2012, 12:00:48
    #37727077
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
techncodeВ консоли все получается, а вот с PHP не знаю что и думать...
SQL('SET AUTOCOMMIT=0');
...
Рейтинг: 0 / 0
28.03.2012, 12:12:43
    #37727095
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
techncode, запросы из консоли и из PHP делаются к одной и той же базе? Спрашиваю потому что судя по документации разные движки в MySQL по разному реализуют поддержку транзакций - Transactions and Atomic Operations . Соответственно, если у тебя разные БД, то и результаты могут быть разными. Имеет также смысл проверить какой режим/движок для конкректных таблиц установлен.

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

Можешь попробовать SET AUTOCOMMIT=0 перед START TRANSACTION вызвать. Хотя документация утверждает что вызов START TRANSACTION подразумевает отключение AUTOCOMMITа.
...
Рейтинг: 0 / 0
28.03.2012, 13:19:36
    #37727261
techncode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
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
28.03.2012, 13:42:52
    #37727316
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
авторЯ бы добавил четвертый параметр - true - к mysql_connect, чтобы заставить открывать новое соединение каждый раз потому что я не уверен каким образом соединение "делится" между скриптами без него. Разумеется надо не забыть закрыть его в конце. И также надо во всех вызовах mysql_* функций использовать переменную $connect.
Если на все приложение используется одно подключение, то все это не нужно.
Между тем более 1 соединение использовано быть не может.
Закрывать тоже имеет смысл если понимаешь зачем это нужно.
...
Рейтинг: 0 / 0
28.03.2012, 14:04:36
    #37727371
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
авторMyISAM
Если почитать документации по транзакциям в MySQL...
...
Рейтинг: 0 / 0
28.03.2012, 14:54:26
    #37727526
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP/MySQL(Транзакции)
techncode bazile ты прав, В MyISAM не работает а в InnoDB пошло даже без AUTOCOMMIT=0. Спасибо!
Нынче самый любимый вопрос на собеседованиях: чем отличается MyISAM от InnoDB
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP/MySQL(Транзакции) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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