Начальная транзакция не определена в mysql. Im фактически использует его для запуска нескольких запросов в моем коде для перемещения строки из одной таблицы в другую. Большая помощь будет оценена. Хорошо, мой вопрос: почему мой Begin_transaction () не определен?
<?php If(isset($trade_id)){ $trade_id= $_GET['trade_id']; } require_once('connect.php'); $mysqli = new mysqli($database_hostname, $database_username, $database_password, $database_name) or exit("Error connecting to database"); try { // First of all, let's begin a transaction $mysqli->begin_transaction(); // A set of queries; if one fails, an exception should be thrown $mysqli->query("INSERT INTO `trade_history1` (session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close) SELECT session_id, trade_id, selection, date, type, size, bidprice, offerprice, stoploss, takeprofit, profitandloss, dateclose, close FROM `opentrades` WHERE `trade_id` = " . $tradeid); $mysqli->query("DELETE FROM `opentrades` WHERE `trade_id` = " . $trade_id); // If we arrive here, it means that no exception was thrown // ie no query has failed, and we can commit the transaction $mysqli->commit(); $_SESSION['message'] = 'Successfully deleted'; } catch (Exception $e) { // An exception has been thrown // We must rollback the transaction $_SESSION['message'] = 'Unable to delete'; $mysqli->rollback(); } $mysqli->close(); // if we successfully delete this, we if ($successfullyDeleted) { $_SESSION['message'] = 'Successfully deleted'; } else { $_SESSION['message'] = 'Unable to delete'; } header('Location: js.php'); ?>
PHP Manual говорит, что mysqli :: begin_transaction нуждается в PHP версии 5.5.0 или выше ( http://php.net/manual/en/mysqli.begin-transaction.php ).
Но вы можете использовать mysqli :: autocommit вместо этого ( http://php.net/manual/en/mysqli.autocommit.php ) с PHP 5.x :
//Begin transaction $mysqli->autocommit(FALSE); ... //End transaction and auto commit $mysqli->autocommit(TRUE);
$mysqli->begin_transaction();
должен быть $mysqli->autocommit(FALSE);
Проверь это
Вы можете использовать этот код, который я тестировал.
Объектно-ориентированный стиль
$cid->multi_query('start transaction;'); $cid->multi_query("insert into demo values('1','Pankaj','9031251290')"); $cid->multi_query('commit;');
Процедурный стиль
mysqli_query($link, "start transaction;"); mysqli_query($link, "INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2)"); mysqli_query($link, "commit;");