私はいくつかの機能をいくつかのものを更新し、いくつかの挿入を削除する別の関数の中で使用しています。上記の2つが成功した場合、またはそれ以外の場合は致命的な結果を引き起こす可能性があります。複数の関数間でsqlトランザクションを1つにすることは可能ですか?
public static function do_stuff()
{
//run sql in function
SELF::function_sql_one_insert();
SELF::function_sql_two_update();
SELF::function_sql_three_delete();
}
ので、同様::だからたとえば...すべての3つの機能のために1つのトランザクションを使用することも可能である
public static function test()
{
SELF::function_sql_one_insert();
SELF::function_sql_two_update();
SELF::function_sql_three_delete();
}
public static function function_sql_one_insert()
{
//sql to run
$sql = "INSERT INTO table
(
fake_row_one,
fake_row_two
)
VALUES
(
?,
?
)";
//run sql
$fake_insert = $database->prepare($sql);
$fake_insert->execute("yeah", "okay");
}
public static function function_sql_two_update()
{
//sql to run
$sql = "UPDATE table
SET fake_row_one = ?
WHERE fake_row_two = ?";
//run sql
$fake_update = $database->prepare($sql);
$fake_update->execute("blahblah", "okay");
}
public static function function_sql_three_delete()
{
//sql to run
$sql = "DELETE FROM TABLE
WHERE fake_row_two = ?";
//run sql
$fake_delete = $database->prepare($sql);
$fake_delete->execute("okay");
}
何1が戻ってそれらのすべてを元に戻す失敗した場合、私はあるacomplishしようとしています。これは可能ですか?代わりに私が何をすることができない場合、もしそうなら、これには何か反対がありますか?すべての機能のためにこれを試してみてください
$working = true;
try
{
SELF::function_sql_one_insert();
} catch (Exception $e)
{
if($e != "")
$working = false;
}
:
あなたがhttp://php.net/manual/en/pdoを読みました。 begintransaction.php? – Mike
ええ、関数を実行する前にトランザクションを開始してからコミットする必要があります。内部関数がブール値成功インジケータを返し、必要に応じてそれに基づいてロールバックすることができます。 –
私はSQL関数を実行しているメイン関数または3つのトランザクションでトランザクションを開始する必要がありますか? – 4334738290