PHP商城數據庫安全事務處理方法

現在是一個電商時代,做電商的首先得有一個商城,所以商城的安全也是不容忽視的,一個數據安全的商城離不開數據庫的事務處理,商城在資金、商品、下單、結賬等重要步驟加上事務控制這是不一定不可少的,像市場上的一些開源商城我都有去研究。
程序員獨立開發商城也要注意這方面的事情,現在我這邊就介紹下PHP操作MySQL事務的方法,分享給大家供大家參考。具體方法如下:
一般來說,事務都應該具備ACID特征。所謂ACID是Atomic(原子性),Consistent(一致性),Isolated(隔離性),Durable(持續性)四個詞的首字母所寫,下面以“銀行轉帳”為例來分別說明一下它們的含義:
① 原子性:組成事務處理的語句形成了一個邏輯單元,不能只執行其中的一部分。換句話說,事務是不可分割的最小單元。比如:銀行轉帳過程中,必須同時從一個帳戶減去轉帳金額,并加到另一個帳戶中,只改變一個帳戶是不合理的。
② 一致性:在事務處理執行前后,數據庫是一致的。也就是說,事務應該正確的轉換系統狀態。比如:銀行轉帳過程中,要么轉帳金額從一個帳戶轉入另一個帳戶,要么兩個帳戶都不變,沒有其他的情況。
③ 隔離性:一個事務處理對另一個事務處理沒有影響。就是說任何事務都不可能看到一個處在不完整狀態下的事務。比如說,銀行轉帳過程中,在轉帳事務沒有提交之前,另一個轉帳事務只能處于等待狀態。
④ 持續性:事務處理的效果能夠被永久保存下來。反過來說,事務應當能夠承受所有的失敗,包括服務器、進程、通信以及媒體失敗等等。比如:銀行轉帳過程中,轉帳后帳戶的狀態要能被保存下來。
在PHP中,mysqli 已經很好的封裝了mysql事務的相關操作。如下示例:
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail? set FScore = 300 where ID= '123456'";
$sql3 = "insert into? ScoreDetail ID,Score) values ('123456',60)";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
? $mysqli->commit();
? echo 'ok';
}else{
?echo 'err';
? $mysqli->rollback();
}
在這里,我們再使用 php mysql 系列函數執行事務。
$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail? set FScore = 300 where ID= '123456'";
$sql3 = "insert into? ScoreDetail ID,Score) values ('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('start transaction');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
??? mysql_query('rollback');
??? echo 'err';
}else{
??? mysql_query('commit');
??? echo 'ok';
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);

轉載于:https://blog.51cto.com/13938514/2404617

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448675.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

職業規劃之ABZ,未雨綢繆35歲危機

35歲的中年人正面臨著上有老下有小,房貸車貸等生活壓力,然而在職場上又面臨被裁員或在招聘中年齡超限的尷尬局面。那么,我們如何應對此危機呢?ABZ理論為我們打開了一扇天窗。 ABZ理論由著名的創業者投資人,LinkedIn和P…

集合去重 (集合元素為引用類型)--- java 8 新特性 --- 根據元素單屬性、多屬性實現去重

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 代碼寫法: (要求 JDK 1.8 或 1.8 以上) package gentle.entity;import lombok.Data; /**** auth…

Django--Forms組件使用

Forms組件的使用 在html表單驗證中,需要通過各種信息的驗證,比如注冊界面的姓名、密碼、郵箱、電話等的驗證,是否符合定義好的規則,不可能每次都要取出對應的字段一一判斷,django內置了Forms組件,可以方便的…

yii2關聯表

asArray()這個方法很好用,返回數組是1版本想要的形式,這種方式有種tp框架的感覺轉載于:https://www.cnblogs.com/peipeiyu/p/10974487.html

詳細程序注解學OpenCL一 環境配置和入門程序

本專欄是通過注解程序的方法學習OpenCL,我覺得一個一個地去摳原理也不是辦法,干脆直接學習程序,然后把相關原理都直接注解到程序語句當中。 原創地址:http://blog.csdn.net/kenden23/article/details/14101657 一開始要配置好環境…

解決 IDEA 在 commit 代碼時 git 日志亂碼 (提交時填寫的中文說明亂碼)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.問題描述: idea 開發代碼中的 中文正常,但提交到碼云時填寫的提交日志是亂碼。 提交到碼云后是這樣的&#…

Box 類

public class Box extends JComponent implements Accessible使用 BoxLayout 對象作為其布局管理器的一個輕量級容器。Box 提供幾個對使用 BoxLayout 的容器(甚至非 Box 容器)有用的類方法。 Box 類可以創建幾種影響布局的不可見組件:glue、s…

神奇的pdfkit工具——將字符串保存為pdf文件

神奇的pdfkit工具——將字符串保存為pdf文件 1、安裝工具包 pip install pdfkit 2、上干貨 import pdfkitdef create_pdf(str_data, to_file):將字符串生成pdf文件 # (需下載wkhtmltox)將程序路徑傳入config對象config pdfkit.configuration(wkhtmltopd…

OpenCL結構

原標題:從零開始學習OpenCL開發(一)架構 1 異構計算、GPGPU與OpenCL OpenCL是當前一個通用的由很多公司和組織共同發起的多CPU\GPU\其他芯片 異構計算(heterogeneous)的標準,它是跨平臺的。旨在充分利用GP…

docker-compose 使用小例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是一個很簡單的小例。 1. 原本有的容器 2. docker-compose.yml 寫法: gentle 處可以任意寫,gentle 是我的項…

2019.6.20

今日內容 MongoDB可視化工具 一、Scrapy爬蟲框架 二、微信機器人 轉載于:https://www.cnblogs.com/jrc123/p/11062606.html

PCL點云 Lebel:Research

https://blog.csdn.net/wokaowokaowokao12345/article/details/73741957 https://blog.csdn.net/u010696366/article/category/3108337轉載于:https://www.cnblogs.com/radiumlrb/p/10986918.html

AMD GPU+VS2010的OpenCL配置

安裝開發環境可以參照DE4-530的OpenCL開發環境搭建(最終版),這篇文章的大部分內容轉載自:http://www.verydemo.com/demo_c92_i226325.html AMD的Heterogeneous Computing有很多AMD的OpenCL資料,包括各種分析工具&#…

ABP開發框架前后端開發系列---(9)ABP框架的權限控制管理

在前面兩篇隨筆《ABP開發框架前后端開發系列---(7)系統審計日志和登錄日志的管理》和《ABP開發框架前后端開發系列---(8)ABP框架之Winform界面的開發過程》開始介紹了權限管理的內容,其中只是列出了內部的權限系統的審…

GIL , 線程池 , 同步 , 異步 , 隊列 , 事件

一.什么是GIL 官方解釋:In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (Howev…

Docker - Compose 使用說明、詳解docker-compose

Compose 模板文件 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。但大家不用擔心,這里面大部分指令…

在Windows下使用OpenCL配置

前言 目前,NVIDIA 和 AMD 的 Windows driver 均有支持OpenCL(NVIDIA 的正式版 driver 是從自195.62 版開始,而 AMD則是從9.11 版開始)。NVIDIA 的正式版 driver 中包含 OpenCL.dll,因此可以直接使用。AMD 到目前為止…

Linux下啟動mongodb

完成安裝mongodb(略) 創建數據目錄: # mkdir /data/mongo 創建配置文件 # vi /data/mongo/mongodb.cnf dbpath/data/mongo/ logpath/data/mongo/mongo.log logappendtrue forktrue port27017 或者:不創建配置文件通過mongod參數啟…

Linux調優(文件系統)

查看單個文件是否發生碎片化(被存在磁盤非連續磁盤塊上)# filefrag -v /var/log/messages 查看文件系統是否存在大量碎片(會顯示空閑離散的塊)# dumpe2fs /dev/sda1 檢查文件系統中是否有錯誤產生# fsck /dev/sdb1 1、格式化相關 …

使用 nohup 設置后臺進程

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 引言: 有時候需要在Linux上設置一個后臺進程,但是當你關閉terminal之時,它會被系統kill掉&#xff0…