mysqli::real_connect

mysqli_real_connect

(PHP 5, PHP 7, PHP 8)

mysqli::real_connect -- mysqli_real_connect建立一個(gè) MySQL 服務(wù)器連接

說(shuō)明

面向?qū)ο箫L(fēng)格

mysqli::real_connect(
    string $host = ?,
    string $username = ?,
    string $passwd = ?,
    string $dbname = ?,
    int $port = ?,
    string $socket = ?,
    int $flags = ?
): bool

過程化風(fēng)格

mysqli_real_connect(
    mysqli $link,
    string $host = ?,
    string $username = ?,
    string $passwd = ?,
    string $dbname = ?,
    int $port = ?,
    string $socket = ?,
    int $flags = ?
): bool

建立一個(gè)到 MySQL 服務(wù)器的鏈接。

mysqli_connect() 的不同點(diǎn):

  • mysqli_real_connect() 需要一個(gè)有效的對(duì)象,這個(gè)對(duì)象由 mysqli_init() 創(chuàng)建。

  • 可以使用 mysqli_options() 設(shè)置各種連接設(shè)置。

  • 提供 flags 參數(shù)。

參數(shù)

mysql

僅以過程化樣式:由mysqli_connect()mysqli_init() 返回的 mysqli 對(duì)象。

host

可以使用域名、IP 地址。如果傳送 null 或者字符串 "localhost" 那么會(huì)使用 通道替代 TCP/IP 連接本地服務(wù)器。

username

MySQL 登錄用戶名

passwd

如果設(shè)置 null,那么會(huì)使用沒有密碼驗(yàn)證的方式嘗試登錄。這樣可以為一個(gè)用戶 提供不同的權(quán)限,基于他是否提供了密碼。

dbname

設(shè)置執(zhí)行查詢語(yǔ)句的默認(rèn)數(shù)據(jù)庫(kù)。

port

指定 MySQL 服務(wù)器的端口

socket

指定使用的 socket 或者命名通道。

注意:

指定 socket 參數(shù)并不能說(shuō)明要采用何種方式連接數(shù)據(jù)庫(kù)。 連接數(shù)據(jù)的方式由 host 設(shè)定。

flags

這里可以設(shè)置連接參數(shù):

Supported flags
Name Description
MYSQLI_CLIENT_COMPRESS 使用壓縮協(xié)議
MYSQLI_CLIENT_FOUND_ROWS 返回語(yǔ)句匹配的行數(shù),而不是影響的行數(shù)
MYSQLI_CLIENT_IGNORE_SPACE 允許函數(shù)名稱后有空格,這將使所有的函數(shù)名稱成為保留字。
MYSQLI_CLIENT_INTERACTIVE 在關(guān)閉連接之前允許等待 interactive_timeout 秒, 他替代 wait_timeout 設(shè)定。
MYSQLI_CLIENT_SSL 使用 SSL 加密

注意:

從安全角度考慮,在 PHP 中不可以使用 MULTI_STATEMENT, 若要執(zhí)行多查詢語(yǔ)句,請(qǐng)使用 mysqli_multi_query()。

返回值

成功時(shí)返回 true, 或者在失敗時(shí)返回 false。

范例

示例 #1 mysqli::real_connect() 例子

面向?qū)ο箫L(fēng)格

<?php

$mysqli 
mysqli_init();
if (!
$mysqli) {
    die(
'mysqli_init failed');
}

if (!
$mysqli->options(MYSQLI_INIT_COMMAND'SET AUTOCOMMIT = 0')) {
    die(
'Setting MYSQLI_INIT_COMMAND failed');
}

if (!
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT5)) {
    die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!
$mysqli->real_connect('localhost''my_user''my_password''my_db')) {
    die(
'Connect Error (' mysqli_connect_errno() . ') '
            
mysqli_connect_error());
}

echo 
'Success... ' $mysqli->host_info "\n";

$mysqli->close();
?>

面向?qū)ο箫L(fēng)格 when extending mysqli class

<?php

class foo_mysqli extends mysqli {
    public function 
__construct($host$user$pass$db) {
        
parent::init();

        if (!
parent::options(MYSQLI_INIT_COMMAND'SET AUTOCOMMIT = 0')) {
            die(
'Setting MYSQLI_INIT_COMMAND failed');
        }

        if (!
parent::options(MYSQLI_OPT_CONNECT_TIMEOUT5)) {
            die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
        }

        if (!
parent::real_connect($host$user$pass$db)) {
            die(
'Connect Error (' mysqli_connect_errno() . ') '
                    
mysqli_connect_error());
        }
    }
}

$db = new foo_mysqli('localhost''my_user''my_password''my_db');

echo 
'Success... ' $db->host_info "\n";

$db->close();
?>

過程化風(fēng)格

<?php

$link 
mysqli_init();
if (!
$link) {
    die(
'mysqli_init failed');
}

if (!
mysqli_options($linkMYSQLI_INIT_COMMAND'SET AUTOCOMMIT = 0')) {
    die(
'Setting MYSQLI_INIT_COMMAND failed');
}

if (!
mysqli_options($linkMYSQLI_OPT_CONNECT_TIMEOUT5)) {
    die(
'Setting MYSQLI_OPT_CONNECT_TIMEOUT failed');
}

if (!
mysqli_real_connect($link'localhost''my_user''my_password''my_db')) {
    die(
'Connect Error (' mysqli_connect_errno() . ') '
            
mysqli_connect_error());
}

echo 
'Success... ' mysqli_get_host_info($link) . "\n";

mysqli_close($link);
?>

以上例程會(huì)輸出:

Success... MySQL host info: localhost via TCP/IP

注釋

注意:

MySQLnd 總是使用服務(wù)器的默認(rèn)字符集。此字符集在連接握手/認(rèn)證時(shí)發(fā)送,并被 mysqlnd 使用。

Libmysqlclient 使用 my.cnf 中的默認(rèn)字符集或者由在調(diào)用 mysqli_init() 之后,mysqli_real_connect() 之前先調(diào)用 mysqli_options() 來(lái)指定。

參見

  • mysqli_connect() - 別名 mysqli::__construct
  • mysqli_init() - 初始化 MySQLi 并返回一個(gè)資源類型的值,這個(gè)值可以作為 mysqli_real_connect() 函數(shù)的傳入?yún)?shù)
  • mysqli_options() - 設(shè)置選項(xiàng)
  • mysqli_ssl_set() - 使用 SSL 建立到數(shù)據(jù)庫(kù)之間的安全連接
  • mysqli_close() - 關(guān)閉先前打開的數(shù)據(jù)庫(kù)連接