日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

php mysql 连接不上_PHP: 连接状态 - Manual

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mysql 连接不上_PHP: 连接状态 - Manual 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

連接狀態

插件改變了 PHP MySQL 連接的控制,新建連接會從一個連接池中獲取,用于替代 client-server

的單一連接方式。連接池包含一組 master 連接,和可選數目的 slave 連接。

連接池中的每一個連接都有自己的狀態,例如:SQL 用戶變量、臨時表、事物狀態。

所有的鏈接狀態可以參考 連接池與切換 說明。

如果插件決定要為負載均衡切換連接,應用可能得到一個不同狀態的鏈接。

應用必須能夠處理這些問題。

示例 #1 配置了一個 master 和一個 slave 的插件

{

"myapp": {

"master": {

"master_0": {

"host": "localhost",

"socket": "\/tmp\/mysql.sock"

}

},

"slave": {

"slave_0": {

"host": "192.168.2.27",

"port": "3306"

}

}

}

}

示例 #2 陷阱:連接狀態和 SQL 用戶變量

$mysqli=?newmysqli("myapp","username","password","database");

if?(!$mysqli)/*?Of?course,?your?error?handling?is?nicer...?*/die(sprintf("[%d]?%s\n",mysqli_connect_errno(),mysqli_connect_error()));/*?鏈接?1:綁定?SQL?用戶變量,因為沒有?SELECT?所以在?master?上執行?*/if?(!$mysqli->query("SET?@myrole='master'"))?{printf("[%d]?%s\n",$mysqli->errno,$mysqli->error);

}/*?連接?2:因為有?SELECT?所以在?slave?上執行?*/if?(!($res=$mysqli->query("SELECT?@myrole?AS?_role")))?{printf("[%d]?%s\n",$mysqli->errno,$mysqli->error);

}?else?{$row=$res->fetch_assoc();$res->close();printf("@myrole?=?'%s'\n",$row['_role']);

}$mysqli->close();?>

以上例程會輸出:

@myrole = ''

范例打開了負載均衡連接,并且執行兩個查詢。

第一個查詢 SET @myrole='master' 沒有以 SELECT

開頭。然而并不能識別這是一個應該在 slave 中執行的查詢,所以他被在 master 中執行。

所以這個變量被綁定在 master 連接中,master 連接設定被改變了。

然后執行 SELECT @myrole AS _role 查詢,差將將其識別為只讀查詢,

并且發送給 slave 服務器。這樣這個查詢不會獲得任何已經設定的 SQL 用戶變量。

這個變量被設定在了第一次使用的 master 連接上面。所以范例將打印

@myrole = ''。

這是開發人員必須注意的問題,插件并不會監控所有連接的變化情況。

若要監控所有的變化,將消耗大量的 CPU 資源。

當然這種陷阱,可以通過 SQL hints 解決。

總結

以上是生活随笔為你收集整理的php mysql 连接不上_PHP: 连接状态 - Manual的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。