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