(PHP 5, PHP 7, PHP 8)
mysqli::real_connect -- mysqli_real_connect — 開啟與 MySQL 伺服器的連線
物件導向風格
$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0程序式風格
$mysql
,$hostname
= null
,$username
= null
,$password
= null
,$database
= null
,$port
= null
,$socket
= null
,$flags
= 0建立與 MySQL 資料庫引擎的連線。
此函式與 mysqli_connect() 不同
mysqli_real_connect() 需要一個有效的物件,該物件必須由 mysqli_init() 函式建立。
您可以使用 mysqli_options() 函式設定各種連線選項。
有一個 flags
參數。
mysql
僅限程序式風格:由 mysqli_connect() 或 mysqli_init() 傳回的 mysqli 物件
hostname
可以是主機名稱或 IP 位址。傳遞 null
時,將從 mysqli.default_host 擷取值。如果可能,將使用管道而不是 TCP/IP 通訊協定。如果同時提供主機名稱和埠號,例如 localhost:3308
,則會使用 TCP/IP 通訊協定。
username
MySQL 使用者名稱,或 null
以根據 mysqli.default_user ini 選項假設使用者名稱。
password
MySQL 密碼,或 null
以根據 mysqli.default_pw ini 選項假設密碼。
database
執行查詢時要使用的預設資料庫,或 null
。
port
嘗試連線到 MySQL 伺服器的埠號,或 null
以根據 mysqli.default_port ini 選項假設埠號。
socket
應該使用的 socket 或具名管道,或者使用 null
來根據 mysqli.default_socket ini 選項自動設定 socket。
注意事項:
指定
socket
參數並不會明確決定連接到 MySQL 伺服器時所使用的連線類型。與 MySQL 資料庫的連線方式是由hostname
參數決定的。
flags(旗標)
您可以使用 flags
參數設定不同的連線選項。
名稱 | 說明 |
---|---|
MYSQLI_CLIENT_COMPRESS |
使用壓縮協定 |
MYSQLI_CLIENT_FOUND_ROWS |
返回符合的列數,而不是受影響的列數 |
MYSQLI_CLIENT_IGNORE_SPACE |
允許函數名稱後面的空格。這會使所有函數名稱成為保留字。 |
MYSQLI_CLIENT_INTERACTIVE |
允許在關閉連線之前閒置 interactive_timeout 秒(而不是 wait_timeout 秒)。 |
MYSQLI_CLIENT_SSL |
使用 SSL(加密) |
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT |
類似 MYSQLI_CLIENT_SSL ,但不驗證提供的 SSL 憑證。這僅適用於使用 MySQL 原生驅動程式和 MySQL 5.6 或更高版本的安裝。 |
注意事項:
基於安全性考量,PHP 不支援
MULTI_STATEMENT
旗標。如果您想執行多個查詢,請使用 mysqli_multi_query() 函數。
如果啟用了 mysqli 錯誤報告(MYSQLI_REPORT_ERROR
)且請求的操作失敗,則會產生警告。此外,如果模式設定為 MYSQLI_REPORT_STRICT
,則會改為拋出 mysqli_sql_exception。
版本 | 說明 |
---|---|
7.4.0 | 現在所有參數皆可為 null。 |
範例 #1 mysqli::real_connect() 範例
物件導向風格
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init 失敗');
}
if (!$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('設定 MYSQLI_INIT_COMMAND 失敗');
}
if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('設定 MYSQLI_OPT_CONNECT_TIMEOUT 失敗');
}
if (!$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')) {
die('連線錯誤 (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo '成功... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>
以物件導向風格擴展 mysqli 類別
<?php
class foo_mysqli extends mysqli {
public function __construct($host, $user, $pass, $db) {
parent::__construct();
if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('設定 MYSQLI_INIT_COMMAND 失敗');
}
if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('設定 MYSQLI_OPT_CONNECT_TIMEOUT 失敗');
}
if (!parent::real_connect($host, $user, $pass, $db)) {
die('連線錯誤 (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');
echo '成功... ' . $db->host_info . "\n";
$db->close();
?>
程序式風格
<?php
$link = mysqli_init();
if (!$link) {
die('mysqli_init 失敗');
}
if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('設定 MYSQLI_INIT_COMMAND 失敗');
}
if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('設定 MYSQLI_OPT_CONNECT_TIMEOUT 失敗');
}
if (!mysqli_real_connect($link, 'localhost', 'my_user', 'my_password', 'my_db')) {
die('連線錯誤 (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo '成功... ' . mysqli_get_host_info($link) . "\n";
mysqli_close($link);
?>
上述範例會輸出
Success... MySQL host info: localhost via TCP/IP
注意事項:
MySQLnd 永遠假設伺服器預設字元集。此字元集在連線握手/驗證期間傳送,MySQLnd 將使用它。
Libmysqlclient 使用 my.cnf 中設定的預設字元集,或是在呼叫 mysqli_real_connect() 之前,但在 mysqli_init() 之後,明確呼叫 mysqli_options() 來設定。