PHP: mysqli_connect - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

mysqli_data_seek mysqli_connect_error

Last updated: Sat, 27 Jan 2007

view this page in

# mysqli_connect

(PHP 5)

mysqli_connect

(no version information, might be only in CVS)

mysqli() -- Открывает новое соединение с сервером MySQL

## Описание

Процедурный стиль

mysqli mysqli_connect ( [string host [, string username [, string passwd [, string dbname [, int port [, string socket]]]]]] )

Объектно-ориентированный стиль (конструктор):

class mysqli {
__construct ( [string host [, string username [, string passwd [, string dbname [, int port [, string socket]]]]]] )
}

Функция mysqli_connect() пытается открыть соединение с сервером MySQL, работающему на сервере, указанном параметром `host`, который может быть именем хоста или IP-адресом. Передача значения `NULL` или строки "localhost" в качестве этого параметра, предполагает подключение к локальному хосту. При возможности будут использованы каналы (pipes) вместо протокола TCP/IP. При успешном подключение, функция mysqli_connect() вернет объект, представляющий соединение с базой данных, или `FALSE` при неудаче.

Параметры `username` и `password` определяют имя пользователя и пароль с которыми будет произведено подключение к серверу MySQL. Если пароль не определен (передан параметр `NULL`), сервер MySQL предпримет попытку аутентифицировать пользователя, как такового, запись о котором не имеет только пароля. Это позволяет использовать одно имя пользователя с различными правами доступа (в зависимости от того, используется пароль или нет).

Если указан параметр `dbname` будет выбрана база данных по-умолчению, которая будет использоваться для выполнения запросов.

Параметры `port` и `socket` используются совместно с параметром `host` для дополнительного контроля над подключением к серверу баз данных. Параметр `port` определяет номер порта для попытки подключения к серверу MySQL, который его прослушивает, в то время как параметр `socket` определяет сокет или именованый канал, которые необходимо использовать для соединения.

> Замечание: Установка параметра `socket` точно не определяет тип соединения для использования при подключении к серверу MySQL. Каким образом установлено соединение с базой данных MySQL определяется параметром `host`.

## Возвращаемые значения

Возвращает объект, представляющий соединение с сервером MySQL или `FALSE`, если попытка подключения потерпит неудачу.

## Примеры

Пример 1. Объектно-ориентированный стиль

`<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Проверка подключения */
if (mysqli_connect_errno()) {
printf("Ошибка подключения: %s\n", mysqli_connect_error());
exit();
}
printf("Информация о хосте: %s\n", $mysqli->host_info);
/* Закрытие соединения */
$mysqli->close();
?>`

Пример 2. Процедурный стиль

`<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Проверка подключения */
if (!$link) {
printf("Ошибка подключения: %s\n", mysqli_connect_error());
exit();
}
printf("Информация о хосте: %s\n", mysqli_get_host_info($link));
/* Закрытие соединения */
mysqli_close($link);
?>`

Результат выполнения данного примера:

    Информация о хосте: Localhost via UNIX socket

add a note User Contributed Notes
mysqli_connect
Gazzer
17-Feb-2007 11:52
`Yes, it's totally odd that php.ini doesn't seem to allow you to global specify the client connection as utf-8. You might try this in the
my.cnf file
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
It didn't work for me, but others may have better luck. In the end I had to specify in the php code as noted below.`
gabor dot kovacs at NOSPAMgmail dot com
08-Feb-2007 06:22
`Using PHP 5.2.0 on Win32 mysqli_connect returns an object and not FALSE even if the connection fails.`
Niel Archer
31-Jan-2007 11:13
`A quick word about the connection encoding for this extension. It doesn't appear to be documented anywhere that I can find, but this defaults to latin1 encoding for the connection, regardless of PHP's or MySQL's settings. I run in a completely UTF-8 setup, and spent days trying to discover the cause of corrupted characters from the Db. If, like me, you need to work with other than latin1, use the set_charset function/method to switch to your encoding of choice.`
jcwebb at dicoe dot com
24-Jan-2007 06:08
`PHP520, MYSQL5027, WinServer2003r2
i created a database with no tables
i created a user with no privileges (testuser,testpw,localhost)
<?php
$MYhostname="localhost"; $MYusername="testuser"; $MYpassword="testpw"; $MYdatabase="mysqlitest";
$MYlink=mysqli_connect($MYhostname, $MYusername, $MYpassword, $MYdatabase) or trigger_error(mysqli_connect_error(),E_USER_ERROR);
printf("Host information: %s\n", mysqli_get_host_info($MYlink));
mysqli_close($MYlink);
?>
This gave an Access Denied error.
But it works with mysql_connect() !!!!!!!!!!!!!
Solution: give the user a GLOBAL SELECT privilege
or create a table and give a SELECT priviledge to the table.
Hope this helps.`
richard at hddbroker dot com
05-Jan-2007 11:04
`If you want to suppress any error messages displayed when using mysqli as an object, do the following:
<?php
$db = @ new mysqli('localhost', 'user', 'pass', 'dbname');
// test for errors
if (mysqli_connect_errno()) {
echo "Database connection error.\n\n";
exit();
}
?>`
Eamon Straughn
01-Jan-2007 04:01
`Many here have said you can't produce a persistent connection, however this is false if you are using objects take below as an example with strict visibility; sorry about no comments just quite busy but hope this helps someone who wants to broaden their perspective;
class A
{
private $link;
public $objects;
//load all child objects with the connection
public function __construct($classes, $db, $host, $user, $pass)
{
$this->link = $this->connect($db, $host, $user, $pass);
$name = __CLASS__;
foreach ($classes as $id => $obj)
{
if(is_subclass_of($obj,$name))
{
$this->objects[$obj] = new $obj($this->link);
}
}
private function connect($db, $host, $user, $pass)
{
$link = new mysqli($host,$user,$pass,$db);
if($link->error) return "could not connect to database server, ". $link->error;
else
return $link;
}
public __destruct($void)
{
if($void) $this->link->close();
}
}
class B extends A
{
private $link;
public function __construct($link)
{
$this->link = $link
}
function getUsers()
{
$q = $this->link->prepare("select id,name,location from users");
$q->execute();
$q->bind_result($id,$name,$location);
$q->fetch();
return array($id,$name,$location);
}
}
example of use:
$classes = array('B');
$db = 'mydatabase';
$host = '127.0.0.1';
$user = 'username';
$pass = 'password';
$a = new A($classes, $db, $host, $user, $pass);
extract($a->objects, EXTR_PREFIX_SAME, 'obj');
$b->getUsers();
this example allows you to initiate one instance of every object as long as it is a child with the same connection. this is just a snippet of a much bigger model.`
Polarina
16-Aug-2006 06:09
`Just so you know, mysqli_connect(); will also throw a warning on an unsuccessfull connect. To avoid such warnings being shown prefix it with an "@" symbol.
<?php
// Example:
@mysqli_connect();
?>`
add a note
mysqli_data_seek mysqli_connect_error

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST