PHP Conference Japan 2024

mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connect開啟與 MySQL 伺服器的連線

說明

物件導向風格

public mysqli::real_connect(
    ?字串 $hostname = null,
    ?字串 $username = null,
    #[\SensitiveParameter] ?字串 $password = null,
    ?字串 $database = null,
    ?整數 $port = null,
    ?字串 $socket = null,
    整數 $flags = 0
): 布林值

程序式風格

mysqli_real_connect(
    mysqli $mysql,
    ?字串 $hostname = null,
    ?字串 $username = null,
    #[\SensitiveParameter] ?字串 $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() 函數。

回傳值

成功時返回 true,失敗時返回 false

錯誤/例外

如果啟用了 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() 來設定。

另請參閱

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top