pdo
Les paramètres de configuration $db_url
, $db_prefix
et $db_debug
sont définis dans le fichier includes/db.inc.
- global $db_url, $db_prefix, $db_debug;
- $db_url = 'mysql://username:password@localhost/databasename';
- $db_prefix = false;
- $db_debug = false;
Pour afficher une trace de toutes les requêtes SQL, mettez le paramètre $db_debug
à true
et incluez le fichier trace.php de la librairie qui définit la fonction trace
. IMPORTANT : Si vous utilisez pdo.php en dehors d'un site web, incluez le fichier dump.php de la librairie et définissez la fonction trace
comme un alias de la fonction dump
:
function trace($var, $label=null) {
return dump($var, $label);
}
db_connect
SYNOPSIS
db_connect($url)
DESCRIPTION
Le connecteur à une base de données a le format scheme://username:password@localhost/databasename
.
scheme
vaut mysql
pour MySQL ou pgsql
pour PostgreSQL.
CODE
- $db_conn=false;
- $db_scheme=false;
- function db_connect($url, $persistent=true) {
- global $db_conn, $db_scheme;
- $url = parse_url($url);
- $scheme = $url['scheme'];
- $host = urldecode($url['host']);
- if (isset($url['port'])) {
- $host = $host . ':' . $url['port'];
- }
- $user = urldecode($url['user']);
- $pass = isset($url['pass']) ? urldecode($url['pass']) : '';
- $path = urldecode($url['path']);
- if ($path[0] == '/') {
- $path = substr($path, 1);
- }
- $dsn = "$scheme:host=$host;dbname=$path";
- $options = array(PDO::ATTR_PERSISTENT => $persistent ? true : false);
- try {
- $db_conn = new PDO($dsn, $user, $pass, $options);
- $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $db_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
- $db_conn->exec("SET NAMES 'utf8'");
- if ($scheme == 'mysql') {
- $db_conn->exec("SET SQL_MODE='ANSI_QUOTES'");
- }
- $db_scheme=$scheme;
- }
- catch (PDOException $e) {
- die($e->getMessage());
- }
- return $db_conn;
- }
db_connect
analyse $url
pour en extraire les paramètres de connexion à la BD puis ouvre une connexion persistante avec le serveur et sélectionne la BD demandée.
Le dialogue est configuré en UTF8.
En cas de problème, db_connect
récupère l'erreur MySQL ou PostgreSQL et déclenche une erreur PHP.
Notez que $db_conn
est une variable globale.
- function db_close() {
- global $db_conn;
- $db_conn=null;
- }
- function db_version() {
- global $db_conn;
- $r = $db_conn->getAttribute(PDO::ATTR_SERVER_VERSION);
- return $r;
- }
- function db_query($sql) {
- global $db_debug;
- global $db_conn;
- if ($db_debug) {
- trace($sql);
- }
- try {
- $r = $db_conn->query($sql);
- }
- catch (PDOException $e) {
- die($e->getMessage());
- }
- $rows = $r->fetchAll(PDO::FETCH_ASSOC);
- if (!$rows) {
- return false;
- }
- return $rows;
- }
db_query
execute la requête $sql
et retourne toutes les lignes en réponse dans un tableau ou false
si la requête n'a rien retourné.
- function db_insert($sql) {
- return _db_sql_exec($sql);
- }
- function db_update($sql) {
- return _db_sql_exec($sql);
- }
- function db_delete($sql) {
- return _db_sql_exec($sql);
- }
- function db_exec($sql) {
- return _db_sql_exec($sql);
- }
- function db_insert_id($id=null) {
- global $db_conn;
- $r = $db_conn->lastInsertId($id);
- return $r;
- }
- function db_sql_arg($s, $escape=true, $optional=false) {
- global $db_conn;
- if ($s === NULL or $s === false or $s === '') {
- return $optional ? 'NULL' : "''";
- }
- return $escape ? $db_conn->quote($s) : "'$s'";
- }
- function db_prefix_table($table) {
- global $db_prefix;
- return $db_prefix ? $db_prefix . $table : $table;
- }
- function _db_sql_exec($sql) {
- global $db_debug;
- global $db_conn;
- if ($db_debug) {
- trace($sql);
- }
- try {
- $r = $db_conn->exec($sql);
- }
- catch (PDOException $e) {
- die($e->getMessage());
- }
- return $r;
- }
Commentaires