二十二 mysqli事務處理與預處理總結

2022-02-07 04:12:21 字數 2871 閱讀 1324

如果不開啟事務,執行一條sql,馬上會持久化資料。可見:預設的mysql對sql語句的執行是自動提交的!

如果開啟了事務,就是關閉了自動提交的功能,改成了commit執行自動提交

自動提交的特徵是儲存在伺服器的乙個叫做autocommit的乙個變數內。使用set 變數名=變數值的形式就可以完成修改(set autocommit=0;),此時就關閉了自動提交功能,需要手動執行commit讓資料持久化

回滾(rollback)

提交(commit)

開始事務(begin、start transaction)

<?php

//資料庫:create table account(id int primary key,balance float);

//銀行轉賬

$mysqli=new mysqli("localhost",'root','','test');

if ($mysqli->connect_error)

//將提交設為假

$mysqli->autocommit(false

);

$sql1="update account22 set balance=balance+2 where id='1';";

$sql2="update account1 set balance=balance-2 where id='2';";

$a=$mysqli->query($sql1

);

$b=$mysqli->query($sql2

);

//判斷語句是否為真

if (!$a || !$b

) else

$mysqli->close();

?>

在學習這個知識點所遇到的問題:**沒問題,在執行事務的時候,rollback不生效。

原因:我的資料庫及表不是innodb和bdb型別的(mysql中只有innodb和bdb型別的資料表才能支援事務處理!其它型別是不支援的!)

解決方法:將資料庫及表修改為innodb型別。修改方法參照:

示例:預處理dml語句

1

<?php

2$mysqli=new mysqli("127.0.0.1","root","","test");

3if (!$mysqli->connect_error) 6//

預處理及繫結

7$sql="insert into user1 (name,password,email,age)values ( ?,?,?,?);";8//

prepare 準備執行的sql語句

9$sql_stmt=$mysqli->prepare($sql) or die($mysqli->error);

10//

引數繫結

11//bind_param:將變數作為引數繫結到預處理語句

12//這裡的型別和順序要對應

13$sql_stmt->bind_param('sssi',$name,$password,$email,$age

);14

//設定引數並執行

15$name='sunwukong';

16$password='123';

17$email='[email protected]';

18$age='200';

19//

執行準備好的sql

20$b=$sql_stmt->execute();

21//

新增第二個

22$name='zhubajie';

23$password='123';

24$email='[email protected]';

25$age='200';

26$b=$sql_stmt->execute();

27//

判斷是否插入成功

28if (!$b

) else

33//

釋放34

$mysqli->close();

35 ?>

預處理dql語句

1

<?php

2$mysqli=new mysqli("127.0.0.1","root","","test");

3if (!$mysqli->connect_error) 6//

1.預處理及繫結

7//2.引數設定

8//3.執行

9$sql="select name from user1 where id>?";

10$stmt=$mysqli->prepare($sql) or die($mysqli->error) ;

11$id=3;

12$stmt->bind_param("i",$id

);13

//bind_result:將變數繫結到預先準備好的語句以獲得結果儲存

14$stmt->bind_result($name

);15

$stmt->execute();

16while ($stmt->fetch())

$stmt->free_result();

$stmt->close();

19 ?>

在學習中遇到的問題

1.(預處理dql語句)執行語句的時候一直提示「fatal error: call to a member function bind_param() on boolean in d:\wamp64\www\shiwu2.php on line 12」,一直在繫結引數**找問題。

原因:sql語句寫錯了。解決方案:在執行sql的時候判斷語句是否執行錯誤並列印錯誤資訊

2.(預處理dql語句)第九行與第12行的引數要對應-name

PostgreSQL 十二 事務處理與併發控制

postgresql提供了多種資料完整性的保證機制,如約束 觸發器 約束和鎖管理等。12.1 事務管理簡介 事務是postgresql中的基本工作單元,是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。事務的屬性 原子性 atomic 事務必須是原子工作單元 對...

PHP與MYSQL事務處理

mysql的事務處理主要有兩種方法。1 用begin,rollback,commit來實現 begin 開始乙個事務 rollback 事務回滾 commit 事務確認 2 直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,它就直接執行!我們可以通過...

Oracle與SQL Server事務處理的比較

事務處理是所有大型資料庫產品的乙個關鍵疑問,各資料庫廠商都在這個方面花費了很大精力,不同的事務處理方式會導致資料庫效能和功能上的巨大差異。事務處理也是資料庫管理員與資料庫運用 程式開發人員必須深刻理解的乙個疑問,對這個疑問的疏忽可能會導致運用 程式邏輯不正確以及效率低下。下面我們針對oracle及s...