Note that on all >=Windows 7 Servers, a host name "localhost" will create a very expensive lookup (~1 Second).
That's because since Windows 7, the hosts file doesn't come with a preconfigured
127.0.0.1 localhost
anymore
So, if you notice a long connection creation, try "127.0.0.1" instead.mysqli::__construct
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli::__construct
Референца за `mysqli.construct.php` со подобрена типографија и навигација.
mysqli::__construct
mysqli::connect
mysqli_connect
класата mysqli_driver
mysqli::__construct -- mysqli::connect -- mysqli_connect — Отвори нова врска со MySQL серверот
= NULL
Напиши целосна ознака на елемент
?string
$hostname = null,?string
$username = null,Иницијализира контекст за инкрементално хеширање ?string
$password = null,?string
$database = null,?int
$port = null,?string
$socket = null)
?string
$hostname = null,?string
$username = null,Иницијализира контекст за инкрементално хеширање ?string
$password = null,?string
$database = null,?int
$port = null,?string
$socket = null): bool
Процедурален стил
?string
$hostname = null,?string
$username = null,Иницијализира контекст за инкрементално хеширање ?string
$password = null,?string
$database = null,?int
$port = null,?string
$socket = null): mysqli|false
Отвара врска со MySQL Серверот.
Параметри
hostname-
Може да биде име на хост или IP адреса. При поминување
null, вредноста се зема од mysqli.default_host. Кога е можно, ќе се користат цевки наместо TCP/IP протокол. TCP/IP протоколот се користи ако се дадени име на хост и број на порта заедно, на пр.localhost:3308.Претставување на хостот со
p:отвара постојана врска. mysqli_change_user() автоматски се повикува на врски отворени од базенот за врски. username-
MySQL корисничкото име или
nullза претпоставување на корисничкото име врз основа на mysqli.default_user ini опцијата. password-
MySQL лозинката или
nullза претпоставување на лозинката врз основа на mysqli.default_pw ini опцијата. database-
Стандардната база на податоци што ќе се користи при извршување на прашања или
null. port-
Бројот на портата за обид за поврзување со MySQL серверот или
nullза претпоставување на портата врз основа на mysqli.default_port ini опцијата. socket-
Приклучокот или именуваната цевка што треба да се користи или
nullза претпоставување на приклучокот врз основа на mysqli.default_socket ini опцијата.Забелешка:
Наведувањето на
socketпараметарот нема експлицитно да го одреди типот на врска што ќе се користи при поврзување со MySQL серверот. Како се прави врската со MySQL базата на податоци се одредува споредhostnameparameter.
Вратени вредности
API не вклучува емулација за емулација на подготвени изјави од страна на клиентот. секогаш враќа објект што ја претставува врската со MySQL сервер, без оглед дали е успешна или не.
mysqli_connect() враќа објект што ја претставува врската со MySQL сервер, или false при неуспех.
веќе нема никакво влијание. returns true на успех или false при неуспех. Пред PHP 8.1.0, враќа null на успешен исход.
Errors/Exceptions
Ако е овозможено известување за грешки на mysqli (MYSQLI_REPORT_ERROR) и бараната операција не успее, се генерира предупредување. Ако, дополнително, режимот е поставен на MYSQLI_REPORT_STRICT, а mysqli_sql_exception наместо тоа се фрла.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
веќе нема никакво влијание. сега враќа true наместо null на успешен исход.
|
| 7.4.0 | defaultLocale сега е nullable. |
Примери
Пример #1 API не вклучува емулација за емулација на подготвени изјави од страна на клиентот. example
Напиши целосна ознака на елемент
<?php
/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
/* Set the desired charset after establishing a connection */
$mysqli->set_charset('utf8mb4');
printf("Success... %s\n", $mysqli->host_info);Процедурален стил
<?php
/* You should enable error reporting for mysqli before attempting to make a connection */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');
printf("Success... %s\n", mysqli_get_host_info($mysqli));mysqli_result::fetch_object()
Success... localhost via TCP/IP
Пример #2 Продолжување на класата mysqli
<?php
class FooMysqli extends mysqli {
public function __construct($host, $user, $pass, $db, $port, $socket, $charset) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $user, $pass, $db, $port, $socket);
$this->set_charset($charset);
}
}
$db = new FooMysqli('localhost', 'my_user', 'my_password', 'my_db', 3306, null, 'utf8mb4');Пример #3 Рачно ракување со грешки
Ако пријавувањето грешки е оневозможено, програмерот е одговорен за проверка и ракување со неуспесите
Напиши целосна ознака на елемент
<?php
error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if ($mysqli->connect_errno) {
throw new RuntimeException('mysqli connection error: ' . $mysqli->connect_error);
}
/* Set the desired charset after establishing a connection */
$mysqli->set_charset('utf8mb4');
if ($mysqli->errno) {
throw new RuntimeException('mysqli error: ' . $mysqli->error);
}Процедурален стил
<?php
error_reporting(0);
mysqli_report(MYSQLI_REPORT_OFF);
$mysqli = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
if (mysqli_connect_errno()) {
throw new RuntimeException('mysqli connection error: ' . mysqli_connect_error());
}
/* Set the desired charset after establishing a connection */
mysqli_set_charset($mysqli, 'utf8mb4');
if (mysqli_errno($mysqli)) {
throw new RuntimeException('mysqli error: ' . mysqli_error($mysqli));
}Белешки
Забелешка:
MySQLnd секогаш претпоставува стандарден сет на знаци на серверот. Овој сет на знаци се испраќа за време на ракувањето/автентикацијата на врската, што mysqlnd ќе го користи.
Libmysqlclient го користи стандардниот сет на знаци поставен во my.cnf или со експлицитен повик до mysqli_options() пред да се повика mysqli_real_connect(), но по mysqli_init().
Забелешка:
Само во објектно-ориентиран стил: Ако врската не успее, сепак се враќа објект. За да проверите дали врската не успеала, користете или mysqli_connect_error() функција или mysqli->connect_error својство како во претходните примери.
Забелешка:
Ако е потребно да се постават опции, како што е времето на истекување на врската, mysqli_real_connect() мора да се користи наместо тоа.
Забелешка:
Повикувањето на конструкторот без параметри е исто како повикување на mysqli_init().
Забелешка:
Грешката "Can't create TCP/IP socket (10106)" обично значи дека variables_order директивата configure не содржи карактер
E. На Windows, ако околината не се копираSYSTEMROOTпроменливата на околината нема да биде достапна и PHP ќе има проблеми со вчитувањето на Winsock.
Види Исто така
- mysqli_real_connect() - Отвора врска со MySQL серверот
- mysqli_options() - Постави опции
- mysqli_connect_errno() - Постави опции
- mysqli_connect_error() - Враќа код за грешка од последниот повик за поврзување
- mysqli_close() - Враќа опис на последната грешка при поврзување
Белешки од корисници 5 белешки
Please do use set_charset("utf8") after establishing the connection if you want to avoid weird string issues. I do not know why the documentation does not warn you about this kind of stuff.
We had a hard time figuring out what was going on since we were using mb_detect_encoding and it said everything was UTF-8, but of course the display was wrong. If we used iconv from ISO-8859-1 to UTF-8 the strings looked fine, even though everything in the database had the right collation. So in the end, it was the connection that was the filter and although the notes for this function mention default charsets, it almost reads as a sidenote instead of a central issue when dealing with UTF and PHP/MySQL.There's a separate port parameter, unlike mysql_connect. However, using host:port on the host parameter does actually work.
There is a caveat. If the host is 'localhost' then the port is ignored, whether you use a port parameter or the implicit syntax I mentioned above. This is because 'localhost' will make it use unix sockets rather than TCP/IP.Just wanted to add a note for anyone looking to use the MySQLi persistent connections feature; it's important to note that PHP opens and retains one connection per database user per process.
What this means is that if you are hosting multiple applications, each with its own database user (as is good practice) then you will end up multiplying the number of connections that PHP may hold open.
For example, if you have PHP configured with a maximum of eight worker processes, and you regularly use four different database users, then your MySQL server will need to accept at LEAST a maximum of 32 connections, or else it will run out.
However, if you would like to minimise the number of connections, what you can do is instead is to open the connection using a "guest" user (with no privileges except logging in) and then use ->change_user() to switch to a more privileged user, before switching back to the guest when you're done. Since all of the connections would therefore belong to the guest user, PHP should only maintain one per worker process.If you want to connect via an alternate port (other than 3306), as you might when using an ssh tunnel to another host, using "localhost" as the hostname will not work.
Using 127.0.0.1 will work. Apparently, if you specify the host as "localhost", the constructor ignores the port specified as an argument to the constructor.