To get UTF-8 charset you can specify that in the DSN.
$link = new PDO("mysql:host=localhost;dbname=DB;charset=UTF8");PDO::__construct
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
PDO::__construct
Референца за `pdo.construct.php` со подобрена типографија и навигација.
PDO::__construct
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDO::__construct — (PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
= NULL
string
$dsn,?string
$username = null,Иницијализира контекст за инкрементално хеширање ?string
$password = null,?array
$options = null)
Креира PDO инстанца што претставува врска со базата на податоци
Параметри
dsn-
Креира PDO инстанца за да претставува врска со бараната база на податоци.
Името на изворот на податоци, или DSN, ги содржи информациите потребни за поврзување со базата на податоци. Генерално, DSN се состои од името на PDO драјверот, проследено со две точки, проследено со синтаксата за поврзување специфична за PDO драјверот. Дополнителни информации се достапни од.
На
dsnдокументацијата специфична за PDO драјверот- параметарот поддржува три различни методи за специфицирање на аргументите потребни за креирање врска со базата на податоци:
-
dsnПовикување на драјверот - ги содржи целосниот DSN.
-
dsnПовикување на URIuri:се состои одuri:file:///path/to/dsnfile - проследено со URI што ја дефинира локацијата на датотека што содржи DSN стринг. URI може да специфицира локална датотека или далечински URL.
-
dsnАлијасирањеnameсе состои од имеpdo.dsn.in php.ini што се мапира наnameЗабелешка:
дефинирање на DSN стринг. php.ini). Исто така, забележете дека позициите на низите започнуваат со .htaccess or httpd.conf
username-
Алијасот мора да биде дефиниран во
password-
Корисничкото име за DSN стринг. Овој параметар е опционален за некои PDO драјвери.
options-
Лозинката за DSN стринг. Овој параметар е опционален за некои PDO драјвери.
Errors/Exceptions
А PDOException се фрла ако обидот за поврзување со бараната база на податоци не успее, без оглед на тоа што PDO::ATTR_ERRMODE е моментално поставено.
Примери
Пример #1 Креирај PDO инстанца преку повикување на драјвер
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
?>Пример #2 Креирај PDO инстанца преку повикување на URI
Следниот пример претпоставува дека датотеката /usr/local/dbconnect постои со дозволи за датотеки што му овозможуваат на PHP да ја прочита датотеката. Датотеката содржи PDO DSN за поврзување со DB2 база на податоци преку PDO_ODBC драјверот:
odbc:DSN=SAMPLE;UID=john;PWD=mypass
PHP скриптата потоа може да креира врска со базата на податоци едноставно со поминување на uri: параметар и насочување кон URI на датотеката:
<?php
$dsn = 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';
$dbh = new PDO($dsn, $user, $password);
?>Пример #3 Креирај PDO инстанца користејќи псевдоним
Следниот пример претпоставува дека php.ini ја содржи следната ставка за да овозможи поврзување со MySQL база на податоци користејќи само псевдоним mydb:
[PDO] pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
<?php
$dsn = 'mydb';
$user = '';
$password = '';
$dbh = new PDO($dsn, $user, $password);
?>Белешки од корисници 9 белешки
To specify a database connection port use the following DSN string
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1;port=3333';
?>A generic pattern to connect to a mariadb or mysql database using a settings file
<?php
$_SETTINGS = parse_ini_file('./settings.ini', true);
$db = new \PDO(
"mysql:hostname={$_SETTINGS['db']['host']};dbname={$_SETTINGS['db']['name']}",
$_SETTINGS['db']['user'],
$_SETTINGS['db']['pass'],
[
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'"
]
);
?>
You might not need the options depicted here but I find them convenient.
Works with a settings.ini file containing for instance:
[db]
host = "localhost"
name = "dbname"
user = "dbuser"
pass = "dbpassword"To connect throught unix socket you need to use
<?php
$dsn = 'mysql:dbname=testdb;unix_socket=/path/to/socket';
?>
You musn't specify host when using socket.When trying to connect to a local database, it seems "uri:file:///" is no longer needed. Just write the PDO pilot name followed by the absolute path of the file.
Example : sqlite:C:\VirtualHosts\phpliteadmin\dbs\surveillance_logeas.s3DBI'd like to point out that in PHP 7.0 in the dsn parameter you can't use 'host=localhost' to solve this you can use 'host=127.0.0.1' instead.Most of the information in the comment here is outdated or wrong.
You do can use host=localhost to connect via socket, which is faster than TCP, so setting 127.0.0.1 is a performance loss.
To use proper utf you should use utf8mb4, for example:
$db = new PDO('mysql:host=' . DATABASE_HOST . ';dbname='. DATABASE_NAME .';charset=utf8mb4', DATABASE_USER, DATABASE_PASSWORD);If you use the UTF-8 encoding, you have to use the fourth parameter :
<?php
$db = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
?>If you override PDO with own class and you want to implement alias from php.ini, you have to get it with `get_cfg_var` instead of `ini_get`.
<?php
class PDO extends \PDO
{
public function __construct(string $dsn, ?string $username = null, ?string $password = null, ?array $options = null)
{
//alias
if (!str_contains($dsn, ':')) {
$dsn = get_cfg_var('pdo.dsn.' . $dsn);
if (!$dsn) {
throw new PDOException('Argument #1 ($dsn) must be a valid data source name');
}
}
// your additional logic
parent::__construct($dsn, $username, $password, $options);
}
}
?>