我一直在網上搜索了大約2天,試圖找出使用所有PDO或所有MySQL進行交易的差異和可能的優勢/劣勢。PHP - 所有PDO交易和嚴格MySQL交易之間的區別?
我爲每個成員做了大約20次插入,您可以同時註冊多個成員,因此查詢的數量可以輕鬆從20到100+,並且我們的活動估計範圍可以從每小時幾百到幾千次。
我知道關於交易的事情,但是我似乎沒有把握的是,如果把所有的插入操作都分配到一個PDO準備或將它們全部分開,那麼它們之間會有很大的區別。 例子:
$stmt1 = $pdo->prepare($query1);
$stmt2 = $pdo->prepare($query2);
$stmt3 = $pdo->prepare($query3);
$stmt4 = $pdo->prepare($query4);
....
$pdo->beginTransaction();
try{
foreach($members as $member)
{
$stmt1->execute($member);
$stmt2->execute($member);
$stmt3->execute($member);
$stmt4->execute($member);
....
}
$pdo->commit();
catch(Exception $e)
{
$pdo->rollback();
}
相比沿着線的東西:
//Inserts for ALL members
$sql = "
START TRANSACTION;
INSERT INTO...;
INSERT INTO...;
INSERT INTO...;
INSERT INTO...;
INSERT INTO...;
INSERT INTO...;
COMMIT;";
try{
$pdo->prepare($sql);
$stmt->execute($member);
catch(Exception $e)
{
$pdo->query("ROLLBACK;");
}
可以這樣創建具有發送一次查詢一個開銷,然後繼續在PHP端解析或可能受益通過一次PDO呼叫一次全部發送?
UPDATE
我注意到在第二個例子中的困惑,我已經editted它。爲了清楚起見,問題在於使用多個PHP端查詢(PDO一次執行一條SQL語句,仍然在一個事務中),在大量流量中潛在的「掛斷」,而發送一大塊SQL一個PDO執行(仍然只有一個事務)。
在你的第一個代碼片段中,'$ pdo-> beginTransaction()'或者'$ pdo-> commit();'是錯位的。他們應該既在內部又在外部。我想你的問題是他們在循環之外?如果兩者都在裏面,那麼你的兩個承認是完全等同的。 – RandomSeed
你是對的,我衝過了這個例子。無論如何,這不是直接的代碼。我對兩種可能的方法之間的差異更感興趣。 – Jish