文字

mysqli::real_connect

mysqli_real_connect

(PHP 5)

mysqli::real_connect -- mysqli_real_connect建立一个 MySQL 服务器连接

说明

面向对象风格

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

过程化风格

bool mysqli_real_connect ( mysqli $link [, string $host [, string $username [, string $passwd [, string $dbname [, int $port [, string $socket [, int $flags ]]]]]]] )

建立一个到 MySQL 服务器的链接。

mysqli_connect() 的不同点:

  • mysqli_real_connect() 需要一个有效的对象,这个对象由 mysqli_init() 创建。

  • 可以使用 mysqli_options() 设置各种连接设置。

  • 提供 flags 参数。

参数

link

仅以过程化样式:由 mysqli_connect() mysqli_init() 返回的链接标识。

host

可以使用域名、IP 地址。如果传送 NULL 或者字符串 "localhost" 那么会使用 通道替代 TCP/IP 连接本地服务器。

username

MySQL 登录用户名

passwd

如果设置 NULL ,那么会使用没有密码验证的方式尝试登录。这样可以为一个用户 提供不同的权限,基于他是否提供了密码。

dbname

设置执行查询语句的默认数据库。

port

指定 MySQL 服务器的端口

socket

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

Note:

指定 socket 参数并不能说明要采用何种方式连接数据库。 连接数据的方式由 host 设定。

flags

这里可以设置连接参数:

Supported flags
Name Description
MYSQLI_CLIENT_COMPRESS 使用压缩协议
MYSQLI_CLIENT_FOUND_ROWS 返回语句匹配的行数,而不是影响的行数
MYSQLI_CLIENT_IGNORE_SPACE 允许函数名称后有空格,这将使所有的函数名称成为保留字。
MYSQLI_CLIENT_INTERACTIVE 在关闭连接之前允许等待 interactive_timeout 秒, 他替代 wait_timeout 设定。
MYSQLI_CLIENT_SSL 使用 SSL 加密

Note:

从安全角度考虑,在 PHP 中不可以使用 MULTI_STATEMENT , 若要执行多查询语句,请使用 mysqli_multi_query()

返回值

成功时返回 TRUE , 或者在失败时返回 FALSE

范例

Example #1 mysqli::real_connect() 例子

面向对象风格

<?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 ();
?>

面向对象风格 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 ();
?>

过程化风格

<?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 );
?>

以上例程会输出:

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

注释

Note:

MySQLnd 总是使用服务器的默认字符集。此字符集在连接握手/认证时发送,并被 mysqlnd 使用。

Libmysqlclient 使用 my.cnf 中的默认字符集或者由在调用 mysqli_init() 之后, mysqli_real_connect() 之前先调用 mysqli_options() 来指定。

参见

  • mysqli_connect() - 别名 mysqli::__construct
  • mysqli_init() - Initializes MySQLi and returns a resource for use with mysqli_real_connect()
  • mysqli_options() - Set options
  • mysqli_ssl_set() - Used for establishing secure connections using SSL
  • mysqli_close() - 关闭先前打开的数据库连接

用户评论:

[#1] php-nospam325123 at brainpower dot no-ip dot org [2010-12-03 03:29:58]

this is because it tries to use sockets with the string localhost this is documented en known

[#2] Pom [2009-12-01 03:47:53]

Notice that when using "localhost" as hostname the port option might be ignored. 

If you wish to connect thru a different port than default, substitute "127.0.0.1" for localhost.

上一篇: 下一篇: