(PHP 5, PHP 7, PHP 8)
mysqli::real_connect -- mysqli_real_connect — 建立一個(gè) MySQL 服務(wù)器連接
面向對象風(fēng)格
$host
= ?,$username
= ?,$passwd
= ?,$dbname
= ?,$port
= ?,$socket
= ?,$flags
= ?過(guò)程化風(fēng)格
$link
,$host
= ?,$username
= ?,$passwd
= ?,$dbname
= ?,$port
= ?,$socket
= ?,$flags
= ?建立一個(gè)到 MySQL 服務(wù)器的鏈接。
與 mysqli_connect() 的不同點(diǎn):
mysqli_real_connect() 需要一個(gè)有效的對象,這個(gè)對象由 mysqli_init() 創(chuàng )建。
可以使用 mysqli_options() 設置各種連接設置。
提供 flags
參數。
mysql
僅以過(guò)程化樣式:由mysqli_connect() 或 mysqli_init() 返回的 mysqli 對象。
host
可以使用域名、IP 地址。如果傳送 null
或者字符串 "localhost" 那么會(huì )使用
通道替代 TCP/IP 連接本地服務(wù)器。
username
MySQL 登錄用戶(hù)名
passwd
如果設置 null
,那么會(huì )使用沒(méi)有密碼驗證的方式嘗試登錄。這樣可以為一個(gè)用戶(hù)
提供不同的權限,基于他是否提供了密碼。
dbname
設置執行查詢(xún)語(yǔ)句的默認數據庫。
port
指定 MySQL 服務(wù)器的端口
socket
指定使用的 socket 或者命名通道。
注意:
指定
socket
參數并不能說(shuō)明要采用何種方式連接數據庫。 連接數據的方式由host
設定。
flags
這里可以設置連接參數:
Name | Description |
---|---|
MYSQLI_CLIENT_COMPRESS |
使用壓縮協(xié)議 |
MYSQLI_CLIENT_FOUND_ROWS |
返回語(yǔ)句匹配的行數,而不是影響的行數 |
MYSQLI_CLIENT_IGNORE_SPACE |
允許函數名稱(chēng)后有空格,這將使所有的函數名稱(chēng)成為保留字。 |
MYSQLI_CLIENT_INTERACTIVE |
在關(guān)閉連接之前允許等待 interactive_timeout 秒,
他替代 wait_timeout 設定。
|
MYSQLI_CLIENT_SSL |
使用 SSL 加密 |
注意:
從安全角度考慮,在 PHP 中不可以使用
MULTI_STATEMENT
, 若要執行多查詢(xún)語(yǔ)句,請使用 mysqli_multi_query()。
成功時(shí)返回 true
, 或者在失敗時(shí)返回 false
。
示例 #1 mysqli::real_connect() 例子
面向對象風(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_TIMEOUT, 5)) {
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();
?>
面向對象風(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_TIMEOUT, 5)) {
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();
?>
過(guò)程化風(fēng)格
<?php
$link = mysqli_init();
if (!$link) {
die('mysqli_init failed');
}
if (!mysqli_options($link, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('Setting MYSQLI_INIT_COMMAND failed');
}
if (!mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
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ù)器的默認字符集。此字符集在連接握手/認證時(shí)發(fā)送,并被 mysqlnd 使用。
Libmysqlclient 使用 my.cnf 中的默認字符集或者由在調用 mysqli_init() 之后,mysqli_real_connect() 之前先調用 mysqli_options() 來(lái)指定。