php程式如何避免使用者同時訪問某連線造成的資料錯誤

時間 2022-07-16 07:35:12

1樓:周陽

樓主你可以考慮mysql的事務處理功能。

一般來說,事務是必須滿足4個條件(acid)

原子性(autmic):事務在執行性,要做到「要麼不做,要麼全做!」,就是說不允許事務部分得執行。即使因為故障而使事務不能完成,在rollback時也要消除對資料庫得影響!

一致性(consistency):事務得操作應該使使資料庫從一個一致狀態轉變倒另一個一致得狀態!就拿網上購物來說吧,你只有即讓商品出庫,又讓商品進入顧客得購物籃才能構成事務!

隔離性(isolation):如果多個事務併發執行,應象各個事務獨立執行一樣!

永續性(durability):一個成功執行得事務對資料庫得作用是持久得,即使資料庫應故障出錯,也應該能夠恢復!

說白了就是某一個使用者進行兌換操作的時候,就把對應的資料表鎖定死,只有等操作完成後才解鎖。

2樓:匿名使用者

過程思路應該是這樣的:

因為資料庫中庫存為1,所以兩個使用者看到的可兌換都是1。

這時其中一個使用者點選了兌換,那麼php程式接收到了表單的提交,開始去資料庫驗證這個可兌換數量,發現是1,那麼就將資料庫中庫存量減1,同時提示使用者兌換成功。

之後第二個使用者又點選了兌換,那麼php程式又接收到了表單的提交,開始去資料庫驗證這個可兌換數量,發現已經是0了,那麼返回一條兌換失敗的資訊給使用者就可以了。

急,php程式,網頁訪問時顯示錯誤:拒絕訪問使用者的根

3樓:匿名使用者

這明顯的是使用者名稱密碼錯誤,填寫正確的資料庫使用者名稱和密碼就可以了

sql多使用者訪問資料庫如何解決的衝突?

4樓:千鋒教育

sql多使用者訪問資料庫其實就是事務併發,會引起如下問題:

1、髒讀:一個事務讀取到了另外一個事務沒有提交的資料

事務1:更新一條資料

事務2:讀取事務1更新的記錄

事務1:呼叫commit進行提交

此時事務2讀取到的資料是儲存在資料庫記憶體中的資料,稱為髒讀。

讀到的資料為髒資料

詳細解釋:

髒讀就是指:當一個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,

另外一個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,那麼另外一個

事務讀到的這個資料是髒資料,依據髒資料所做的操作可能是不正確的。

2、不可重複讀:在同一事務中,兩次讀取同一資料,得到內容不同

事務1:查詢一條記錄

事務2:更新事務1查詢的記錄

事務2:呼叫commit進行提交

事務1:再次查詢上次的記錄

此時事務1對同一資料查詢了兩次,可得到的內容不同,稱為不可重複讀。

3、幻讀:同一事務中,用同樣的操作讀取兩次,得到的記錄數不相同

事務1:查詢表中所有記錄

事務2:插入一條記錄

事務2:呼叫commit進行提交

事務1:再次查詢表中所有記錄

此時事務1兩次查詢到的記錄是不一樣的,稱為幻讀

詳細解釋:

幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,

這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表

中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,

就好象發生了幻覺一樣。

處理以上隔離級別的問題,採用如下方是:

事務隔離五種級別:

transaction_none 不使用事務。

transaction_read_uncommitted 允許髒讀。

transaction_read_committed 防止髒讀,最常用的隔離級別,並且是大多數資料庫的預設隔離級別

transaction_repeatable_read 可以防止髒讀和不可重複讀,

transaction_serializable 可以防止髒讀,不可重複讀取和幻讀,(事務序列化)會降低資料庫的效率

以上的五個事務隔離級別都是在connection介面中定義的靜態常量,

使用settransactionisolation(int level) 方法可以設定事務隔離級別。

如:con.settransactionisolation(connection.repeatable_read);

注意:事務的隔離級別受到資料庫的限制,不同的資料庫支援的的隔離級別不一定相同

1 髒讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加共享鎖,讀取完釋放事務1讀取資料時加上共享鎖後(這 樣在事務1讀取資料的過程中,其他事務就不會修改該資料),不允許任何事物操作該資料,只能讀取,之後1如果有更新操作,那麼會轉換為排他鎖,其他事務更 無權參與進來讀寫,這樣就防止了髒讀問題。

但是當事務1讀取資料過程中,有可能其他事務也讀取了該資料,讀取完畢後共享鎖釋放,此時事務1修改資料,修改 完畢提交事務,其他事務再次讀取資料時候發現資料不一致,就會出現不可重複讀問題,所以這樣不能夠避免不可重複讀問題。

2 不可重複讀:讀取資料時加共享鎖,寫資料時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事物修改該資料,不管資料在事務過程中讀取多少次,資料都是一致的,避免了不可重複讀問題

3 幻讀問題:採用的是範圍鎖ranges ranges_s模式,鎖定檢索範圍為只讀,這樣就避免了幻影讀問題。

5樓:江城

最常見的是多個使用者同時操縱一個表的時候衝突,一個想改資料,一個想讀刪資料,當然會有衝突,這是有鎖的機制來約束併發訪問資料,就是當一個使用者對一個表的某個欄位進行操作時鎖定資料,直到操作完成鎖才接觸,然後下一個使用者來運算元據。

6樓:

不用太多考慮,資料庫系統替你考慮大部分情況。

php中如何禁止使用者直接訪問某個目錄或者檔案,但是前提肯定是程式要能訪問執行的

7樓:匿名使用者

便宜<?php

//在一個頁面定義一個常量

define('check', true);

//在需要判斷的頁面判斷這個常量是否有值

if(!defined('check'))?>

8樓:匿名使用者

加個許可權就可以了,在頁面開頭用include匯入你想要設定的許可權,這樣不就行了?

9樓:匿名使用者

可以用session

php程式設計,一個網頁同時操作一個資料庫裡的兩張表,為何錯誤了。

如何成為PHP高階程式設計師??PHP程式設計師的職業要求

從基礎開始。把每一個環節都搞懂。然後再循序漸進,一步一步的就可以成為高手啦!其實所謂的高手都是一點一點積累起來的。php基礎要會,基本語法,物件導向,資料庫設計。對mvc框架熟悉例如 thinkphp,yii,ci等。拿thinkphp為例。假如你對thinkphp框架很熟悉了,並且能熟練應用了,然...

請PHP高手來解決,連線資料庫使用者登入程式,。要求MD5密碼加密

mysql query db 這是要幹什麼啊?把這句去掉 sql select from user where name username and password pws 改成 sql select from user where name username.and password pws.1....

如何獲取微信小程式使用者openid

流程圖如下。主要 頁面js package wxpay public class authtoken public void setaccess token string access token public long getexpires in public void setexpires in...