『壹』 怎麼用php在mysql創建一表,並且要id欄位為自增長的,
$servername="localhost";
$username="username";
$password="password";
$dbname="myDB";
//創建連接
$conn=newmysqli($servername,$username,$password,$dbname);
//檢測連接
if($conn->connect_error){
die("Connectionfailed:".$conn->connect_error);
}
//sqltocreatetable
$sql="CREATETABLEMyGuests(
idINT(6)UNSIGNEDAUTO_INCREMENTPRIMARYKEY,
firstnameVARCHAR(30)NOTNULL,
lastnameVARCHAR(30)NOTNULL,
emailVARCHAR(50),
reg_dateTIMESTAMP
)";
if($conn->query($sql)===TRUE){
echo"";
}else{
echo"Errorcreatingtable:".$conn->error;
}
$conn->close();
『貳』 php mysql怎麼創建資料庫圖解
在一個伺服器上一般來講都不止一個站點,更不止一個MySQL(和PHP搭配之最佳組合)資料庫。
為了防止安全隱患,我們一般針對每個資料庫都設置了獨立的資料庫訪問帳號,該帳號僅有訪問該資料庫的許可權。下面就讓我們來具體演示一下:
1、首先我們要登陸php(做為現在的主流開發語言)MyAdmin,不做演示。
4、在主界面的右邊點擊「許可權」來創建資料庫帳號。
5、在許可權頁面中,我們點擊「添加新用戶」
6、在該頁面中,我們填寫要創建的資料庫用戶名,該用戶的訪問范圍,及密碼。
如上圖,我們填寫了用戶名為:cncmsuser,該資料庫用戶只允許本機訪問,主機一項選擇本地;密碼我們使用自動生成的,點下面的「Generate」會生成一個隨機密碼,然後點「Copy」會自動填寫到密碼框中。
下面的框都不選,直接拉到頁面最下面點執行即可創建一個新用戶。
資料庫用戶創建成功,會返回如下頁面:
7、最重要的一步,設置該用戶的資料庫訪問許可權
在資料庫用戶添加成功返回的頁面中可以直接設置許可權。這里我們選擇按資料庫指定許可權:
如上圖,在資料庫列表中選擇我們剛剛創建的cncmstest,即會自動進入該資料庫的許可權設置頁面。
在上圖的許可權設置中,我們把「數據」、「結構」兩列的許可權全部選中,管理許可權都不要選。點執行即可。
到這里,我們已經全部設置完畢了,創建了一個資料庫:cncmstest,並創建了資料庫用戶cncmsuser,特別指定了該用戶只對cncmstest的訪問許可權。如此,便達到了我們一開始所講的目的:為每一個資料庫指定獨立的用戶訪問許可權。
『叄』 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)
一、PHP操作MySql資料庫
新增數據
<?php
$query = "INSERT INTO grade (name,email,point,regdate) VALUE
(' 李三','[email protected]',,NOW())" ;
@mysql_query($query) or die( '添加數據出錯:' .mysql_error());
?>
修改數據
<?php
$query = "UPDATE grade SET name='小可愛' WHERE id=6" ;
@mysql_query($query) or die( '修改出錯:' .mysql_error());
?>
刪除數據
<?php
$query = "DELETE FROM grade WHERE id=6";
@mysql_query($query) or die( '刪除錯誤:' .mysql_error());
?>
顯示數據
<?php
$query = "SELECT id,name,email,point FROM grade";
$result = @mysql_query($query) or die( '查詢語句出錯:' .mysql_error());
while (!! $row = mysql_fetch_array($result)) {
echo $row[ 'id' ]. '----' .$row['name' ].'----' .$row ['email' ]. '----' .$row['point' ];
echo '<br />';
}
?>
二、其他常用函數
mysql_f etch_row() :從結果集中取得一行作為枚舉數組
mysql_f etch_assoc() : 從結果集中取得一行作為關聯數組
mysql_f etch_array() : 從結果集中取得一行作為關聯數組,或數字數組,或二者兼有
mysql_f etch_lengths () : 取得結果集中每個輸出的長度
mysql_f ield_name(): 取得結果中指定欄位的欄位名
mysql_num_rows(): 取得結果塵清集中行的數目
mysql_num_f ields():取得結果集中欄位的數目
mysql_get_client_inf o() : 取得 MySQL 客戶端信息
mysql_get_host_info(): 取得攔兄瞎 MySQL 主機信息
mysql_get_proto_info(): 取得 MySQL 協議簡空信息
mysql_get_server_inf o() : 取得 MySQL 伺服器信息