php連接mysql原理(php技術和mysql怎麼結合)

本文目錄一覽:

php-fpm怎麼連接的mysql

們都知道,php是不能直接操作 mysql的,他需要通過擴展提供介面調用,php的mysql擴展也好幾個,只支持面向過程的mysql,既支持面向過程也支持面向對象的mysqli,只支持面向對象的PDO,當然無論是那個擴展,也只是php語法寫法上的區別而已,底層其實是一樣的。

今天我們不講語法這些老掉牙的東西,我們隨便找一個擴展,來分析一下 php底層 和 mysql 之間的通信原理。

首先我們來理解一下 php-fpm 的工作原理,php-fpm 是一個 php-cgi 進程管理器,其實就是一個連接池,它和nginx配合的工作原理如下。

我們先從最簡單的靜態方式入手觀察他的工作原理

vim php-fpm.ini

[www]

pm = static

pm.max_children = 5

pm.max_requests = 2

上面三句話的含義是什麼呢:

1、static 表示靜態以靜態方式生成 php-fpm 進程

2、pm.max_children = 5 表示當 php-fpm 啟動時就啟動 5 個 php-fpm 子進程 等待處理 nginx 發過來的請求

3、pm.max_requests = 2 表示每個 php-fpm 子進程處理 2 個請求就銷毀,當然父進程每次看到有銷毀的自然也就會生成新的子進程

我們來簡單驗證一下這個說法:

首先重啟 php-fpm,讓它複位一下

接下來寫一條簡單的語句輸出當前進程ID

echo “當前 php-fpm 進程ID:”.posix_getpid();

不斷刷新瀏覽器觀察輸出變化

當前 php-fpm 進程ID:24548

當前 php-fpm 進程ID:24549

當前 php-fpm 進程ID:24550

當前 php-fpm 進程ID:24547

當前 php-fpm 進程ID:24551

當前 php-fpm 進程ID:24548

當前 php-fpm 進程ID:24549

當前 php-fpm 進程ID:24550

當前 php-fpm 進程ID:24547

當前 php-fpm 進程ID:24551

當前 php-fpm 進程ID:24563

當前 php-fpm 進程ID:24564

當前 php-fpm 進程ID:24565

當前 php-fpm 進程ID:24566

當前 php-fpm 進程ID:24567

當前 php-fpm 進程ID:24563

當前 php-fpm 進程ID:24564

當前 php-fpm 進程ID:24565

當前 php-fpm 進程ID:24566

當前 php-fpm 進程ID:24567

當前 php-fpm 進程ID:24568

當前 php-fpm 進程ID:24569

當前 php-fpm 進程ID:24570

當前 php-fpm 進程ID:24571

當前 php-fpm 進程ID:24572

當前 php-fpm 進程ID:24568

當前 php-fpm 進程ID:24569

當前 php-fpm 進程ID:24570

當前 php-fpm 進程ID:24571

當前 php-fpm 進程ID:24572

可以看得出,第一批id不是按照順序執行的,進程id為24547的進程是在第四位處理的,然後從下面開始,所有id都是順序執行的而且每次生成的一批id都是遞增,是不是有種mysql自增主鍵的趕腳呢?

這裡需要注意的是,無論是靜態還是下面的動態配置方式,只要沒有設置 max_requests ,那麼進程是不會銷毀的,也就是說當一個進程裡面出現死循環或者內存溢出等導致進程僵死的情況出現的時候,處理的進程就會少一個了

好吧理解了靜態的處理方式,我們其實也很容易知道這個方式的弊端了,當然我們平時伺服器不可能就開5個進程每個進程處理2個請求,我們來做一個簡單的加減乘除,看看一個伺服器應該開多少個 php-fpm 合適

首先我們來看看一個簡單的echo需要多少內存:

$size = memory_get_usage();

$unit = array(‘b’,’kb’,’mb’,’gb’,’tb’,’pb’);

$memory = @round($size/pow(1024,($i=floor(log($size,1024)))),2).’ ‘.$unit[$i];

echo “當前 php-cgi 進程所使用內存:”.$memory;

觀察瀏覽器我們可以得到一下數據:

當前 php-cgi 進程所使用內存:227.17 kb

也就是說一個簡單的什麼都不幹的php就已經佔用了200多K的內存,當然這也不算多。

不過進程多了cpu切換進程速度就會變慢,所以這個數還是需要通過ab等測試工具才能測試出具體應該開多少比較合理

我們先從200開始,不斷的增加,架設增加到800的時候,效率和400一樣,那我們就沒必要開800那麼多進程浪費內存了。

那麼問題就來了,如果同一時間請求出超過400呢?有人說會排隊等待,真的會排隊等待嗎?答案明顯是 php-fpm 是沒能力排隊了,因為處理請求的php-fpm子進程都用完了,那麼等待也就只能是在 nginx 等待,通常一個 nginx 也不只是轉發請求給 php-fpm 就完事了,他還要處理靜態文件呢?如果這些php請求導致nginx的請求數過多一直在等待,那麼訪問靜態文件自然也會卡了,這時候我們就需要配置成下面的動態處理方式。

[www]

pm.max_children = 10

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 8

;pm.max_requests = 2

上面五句話的含義是什麼呢:

1、dynamic 表示靜態以動態方式生成 php-fpm 進程

2、pm.max_children = 10 同時活動的進程數 10個

3、pm.start_servers = 5 表示當 php-fpm 主進程啟動時就啟動 5 個 php-fpm 子進程

4、pm.min_spare_servers = 2 表示最小備用進程數

5、pm.max_spare_servers = 8 表示最大備用進程數

6、pm.max_requests = 2 上面說過就不說了

當前 php-fpm 進程ID:2270

當前 php-fpm 進程ID:2271

當前 php-fpm 進程ID:2272

當前 php-fpm 進程ID:2273

當前 php-fpm 進程ID:2274

當前 php-fpm 進程ID:2270

當前 php-fpm 進程ID:2271

當前 php-fpm 進程ID:2272

當前 php-fpm 進程ID:2273

當前 php-fpm 進程ID:2274

當前 php-fpm 進程ID:2270

當前 php-fpm 進程ID:2271

當前 php-fpm 進程ID:2272

當前 php-fpm 進程ID:2273

當前 php-fpm 進程ID:2274

求php連接mysql做註冊系統的原理。

登陸原理:用戶名和密碼從資料庫數據比對正確後,把某些信息寫到 cookie中 ,其他頁面判斷cookie是否存在這個值來判斷用戶登陸。

註冊系統:簡單來說就是 把會員信息插入數據表中

php和mysql是怎麼連接起來的

PHP文件夾下的php.ini配置文件下找到php_mysql.dll 和php_mysqli.dll這兩個擴展把前面的;去掉,既然後重啟伺服器,用 mysql_connect來新建一個到mysql的連接

php連接mysql資料庫原理是怎樣的

mysql_connect(“網站mysql的url”,”賬戶”,”密碼”);

通常情況下

網站的mysql也是伺服器上的

伺服器廠商會給你mysql的url地址

通常用phphmyadmin在線管理mysql

因為window和linux的根目錄不太一樣

linux的根目錄是root

而mysql通常是和php等等平級的

你在瀏覽器地址欄輸入「localhost」

你可以看到你的apache

php

phpmyadmin

mysql

等等的目錄和信息

輸入localhost/info

可以看到php的信息

一般情況下

你把xxx.sql文件放到www下

以www為根目錄

mysql在上一級

就「../」

php文件在平級

即「./」

PHP怎麼連接MySQL

PHP連接mysql資料庫是PHP新手們必須要掌握的一項技能,只要掌握了PHP對資料庫進行增刪改查等操作,就可以寫出一些簡單且常見的程序。如留言表,新聞頁等。本篇文章主要給大家詳細介紹PHP連接Mysql資料庫的兩種常用方法。

下面我們通過具體的代碼示例來給大家詳細介紹兩種PHP連接mysql資料庫的方法。

mysqli連接資料庫和pdo連接資料庫。

第一種方法:使用mysqli連接mysql資料庫

代碼實例如下:

?php

$host=’127.0.0.1′;

$user=’root’;

$password=’root’;

$dbName=’php’;

$link=new mysqli($host,$user,$password,$dbName);

if ($link-connect_error){

die(”連接失敗:”.$link-connect_error);

}

$sql=”select * from admins”;

$res=$link-query($sql);

$data=$res-fetch_all();

var_dump($data);

在經過一系列的連接操作後,我們再創建一個sql語句對其中數據表進行查詢檢驗。在上述代碼中,我們要先創建一些需要用到的變數,如資料庫用戶名、資料庫名密碼等。然後我們用面向對象的方式連接了名為php的資料庫。再通過if條件語句,connect-error方法判斷PHP連接資料庫是否成功。

這裡我們先登錄phpmyadmin看看是否存在php資料庫,從下圖可以知道是存在php這個資料庫的。

最後通過瀏覽器訪問,結果如下圖:

從圖中可以得知,我們成功地連接了php資料庫,並且能查詢出數據表信息。

第二種方法:使用PDO連接資料庫

代碼示例如下:

?php

$host=’127.0.0.1′;

$user=’root’;

$password=’root’;

$dbName=’php’;

$pdo=new PDO(”mysql:host=$host;dbname=$dbName”,$user,$password);

$sql=”select * from admins”;

$data=$pdo-query($sql)-fetch();

var_dump($data);

PHP連接Mysql步驟以上就是關於PHP連接資料庫查詢數據的兩種常用方法詳解,更多相關教程請訪問php中文網mysql視頻教程,歡迎參考學習

php怎麼連接mysql資料庫

1、新建一個php_mysql.php的文件

2、查看mysql服務是否打開,或者客戶端的mysql能夠正常打開。

滑鼠右鍵我的電腦–》管理–》服務和應用程序–》服務–》找到mysql服務,看看是不是啟用狀態。

也可以打開運行,輸入 mysql -u root(用戶名) -p 123456(密碼)

看看能不能打開客戶端。

3、如果上面的可以了,那麼就進入正題了,php連接mysql代碼實例

4、最後運行這個文件,看看運行結果吧。

原創文章,作者:ROQV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147168.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ROQV的頭像ROQV
上一篇 2024-11-01 14:06
下一篇 2024-11-01 14:06

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • Python熱重載技術

    Python熱重載技術是現代編程的關鍵功能之一。它可以幫助我們在程序運行的過程中,更新代碼而無需重新啟動程序。本文將會全方位地介紹Python熱重載的實現方法和應用場景。 一、實現…

    編程 2025-04-29
  • 瘦臉演算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉演算法 Python 實現的原理和方法,包括該演算法的意義、流程、代碼實現、優化等內容。 一、演算法意義 隨著科技的發展,瘦臉演算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 神經網路BP演算法原理

    本文將從多個方面對神經網路BP演算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP演算法簡介 BP演算法是一種常用的神經網路訓練演算法,其全稱為反向傳播演算法。BP演算法的基本思想是通過正…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python包絡平滑技術解析

    本文將從以下幾個方面對Python包絡平滑技術進行詳細的闡述,包括: 什麼是包絡平滑技術? Python中使用包絡平滑技術的方法有哪些? 包絡平滑技術在具體應用中的實際效果 一、包…

    編程 2025-04-29

發表回復

登錄後才能評論