Откат PDO и beginTransaction, не может работать более 1 запроса

Первый запрос будет выполнен успешно, но для второго он не работает.
Ниже приведена кодировка, которую я объявляю своей базе данных и выполняю два запроса:

$db = new PDO( "sqlsrv:server=$servername ; Database=$databasename", $UserId, $pwd);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$db->beginTransaction();

$sql2 = "INSERT INTO Header ". "(Number,Date)". "VALUES (:Number, :Date)";

try
{
$stmt2 = $db->prepare($sql2);
$stmt2->bindParam("Number", $Number);
$stmt2->bindParam("Date", $Date);
$stmt2->execute();

$sql3 = "UPDATE table2
SET Number= :Number
WHERE Date= :Date ";

try
{
$stmt3 = $db->prepare($sql3);
$stmt3->bindParam("Number", $Number);
$stmt3->bindParam("Date ", $Date );

$stmt3->execute();
}
catch(PDOException $e)
{
$db->rollBack();
}
$db->commit();
}
catch(PDOException $e)
{
$db->rollBack();
}

Я пытаюсь, прежде чем установить автокоммит на ложь $db->setAttribute(PDO::ATTR_AUTOCOMMIT,0); Однако, это показывает the auto-commit mode cannot be changed for this driver сообщение об ошибке.

0

Решение

Вам не нужно внутреннее предложение try … catch, потому что 1-я или 2-я ошибка в любом случае вызовут откат.
Вернуться к вашему вопросу, MySQL может не выполнить ваш оператор обновления, поскольку целевые строки не идентифицируются уникальным идентификатором. (небезопасное обновление)

Вы можете переопределить контрольную точку безопасного обновления как:

SET SQL_SAFE_UPDATES =0;
do the update..
SET SQL_SAFE_UPDATES =1;

или используйте уникальные идентификаторы в предложении where.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]