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

search for in the

MS SQL Server (PDO)> <MySQL (PDO)
[edit] Last updated: Tue, 21 May 2013

view this page in

PDO_MYSQL DSN

(PECL PDO_MYSQL >= 0.1.0)

PDO_MYSQL DSNConnexion aux bases de données MySQL

Description

Le Data Source Name (DSN) de PDO_MYSQL est composé des éléments suivants :

Préfixe DSN

Le préfixe DSN est mysql:.

host

L'hôte sur lequel le serveur de base de données se situe.

port

Le numéro de port où le serveur de base de données est en train d'écouter.

dbname

Le nom de la base de données.

unix_socket

Le socket Unix MySQL (ne devrait pas être utilisé avec host ou port).

charset

Le jeu de caractères. Voir la documentation sur les concepts des jeux de caractères pour plus d'informations.

Avant la version 5.3.6 de PHP, cet élément était ignoré. Le même comportement peut être partiellement reproduit avec l'option PDO::MYSQL_ATTR_INIT_COMMAND du driver, comme le montre l'exemple suivant.

Avertissement

La méthode de l'exemple suivant ne peut être utilisée qu'avec des jeux de caractères qui partagent la même représentation des 7 octets les plus faibles qu'en ASCII, comme ISO-8859-1 et UTF-8. Les utilisateurs utilisant des jeux de caractères ayant une représentation différente (comme UTF-16 ou Big5) doivent utiliser l'option charset fournie depuis la version 5.3.6 de PHP.

Exemple #1 Définition du jeu de caractères pour la connexion à UTF-8 avant PHP 5.3.6

<?php
$dsn 
'mysql:host=localhost;dbname=testdb';
$username 'username';
$password 'password';
$options = array(
    
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

$dbh = new PDO($dsn$username$password$options);
?>

Historique

Version Description
5.3.6 Avant la version 5.3.6, charset était ignoré.

Exemples

Exemple #2 Exemples avec le DSN de PDO_MYSQL

L'exemple suivant montre le DSN PDO_MYSQL pour se connecter aux bases de données MySQL :

mysql:host=localhost;dbname=testdb
Exemples plus complets :
mysql:host=localhost;port=3307;dbname=testdb
mysql:unix_socket=/tmp/mysql.sock;dbname=testdb

Notes

Note: Unix seulement:

Lorsque le nom d'hôte est "localhost", la connexion est faite par un socket Unix. Si PDO_MYSQL est compilé avec libmysqlclient alors le fichier de socket est celui précisé à la compilation de libmysqlclient. Si PDO_MYSQL est compilé avec mysqlnd, un socket par défaut peut être indiqué via la paramètre pdo_mysql.default_socket.



MS SQL Server (PDO)> <MySQL (PDO)
[edit] Last updated: Tue, 21 May 2013
 
add a note add a note User Contributed Notes PDO_MYSQL DSN - [4 notes]
up
1
damien at mc-kenna dot com
1 year ago
It appears that internally the host string infers a default of "localhost", e.g. this appears to work as a valid $dsn: mysql:host=;port=3306
up
1
codeslinger at compsalot dot com
4 years ago
I have tested this and found that the "dbname" field is optional.  Which is a good thing if you must first create the db.

After creating a db be sure to exec a "use dbname;"  command, or else use fully specified table references.
up
0
rustamabd at gmail dot com
4 years ago
Even though pdo_mysql accepts an additional "charset" parameter in the DSN (see mysql_driver.c:442), as of PHP 5.2.9 it does not do anything with it.

A possible workaround to set the charset to UTF-8, for example, could be:
<?php

    $dbh
= new PDO("mysql:$connstr"$user, $password);

   
$dbh -> exec("set names utf8");

?>
up
-2
codeslinger at compsalot dot com
4 years ago
Here is a function that provides a generic interface to connect
 to a mySQL PDO.  This takes care of the default values automatically
and deals with the difference between a host name and a socket path.

The advantage of using LOCALHOST for the default is that you don't have
 to worry about IPv4 vs IPv6.  But keep in mind that mySQL login security
does not treat the name as being interchangeable with the ip address. 
You could of course change the default to use a socket path instead.

Enjoy!
Codeslinger

P.S. This form forces you to limit the length of your lines, so I had to
split a couple of things.

<?php

//pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp
//
//  Creates a new mySQL database connection
//
//  Returns a PDO object or an error message 
//  Use: is_object()  to verify the result
//
//
//  If $DBHost starts with a '/' then it is treated as a Socket
//
//  if $DBHost is empty it will default to LOCALHOST which is NOT the
//  same as 127.0.0.1
//
//  $DBPort is optional and will use the standard mySQL default if not
//  specified
//
//  The database name ($DBName) is optional, but if it is specified
//  it must exist or an error results
//
//  2009-03-11  Created: by codeslinger at compsalot.com
//
//          Released to the Public Domain free to use and modify
//
//
function dbPDO_Connect_mySQL($DBUser, $DBPass, $DBName = false,
                           
$DBHost = false, $DBPort = false)
{

   
$DBNameEq = empty($DBName) ? '' : ";dbname=$DBName";
   
    if (empty(
$DBHost)) $DBHost = 'localhost';
   
    If (
$DBHost[0] === '/')
    {
       
$Connection = "unix_socket=$DBHost";
    }
    else
    {
        if (empty(
$DBPort)) $DBPort = 3306;
       
$Connection = "host=$DBHost;port=$DBPort";
    }
   
   
//======================
   
   
try
    {
       
$dbh     = new PDO("mysql:$Connection$DBNameEq"
                                 
$DBUser, $DBPass);
    }
    catch (
PDOException $e)
    {
        return
$e->getMessage();
    }

    return
$dbh;
}

//================================
//================================
//
//Example of use:

  //connects to the default (localhost)

 
$dbh = dbPDO_Connect_mySQL('user', 'password', 'database');

 
//............................................................
  //error handler goes here

 
if (!is_object($dbh)) trigger_error("Failed to connect to 'database' "
      
." | Error = $dbh", E_USER_ERROR);

 
//............................................................
  //get a record

 
$sql = "select * from SomeTable limit 1;";
   
 
$dbRS = $dbh->query($sql);
 
$row = empty($dbRS) ? false : $dbRS->fetch(PDO::FETCH_ASSOC);
  if (!empty(
$dbRS)) $dbRS->closeCursor();

 
//............................................................
  //do something with the data

 
if (!empty($row)) print_r($row);   
  else echo
"Error? no data found\n";

?>

 
show source | credits | sitemap | contact | advertising | mirror sites