Skip to content

Instantly share code, notes, and snippets.

@HarryR
Created November 20, 2012 22:12
Show Gist options
  • Save HarryR/4121607 to your computer and use it in GitHub Desktop.
Save HarryR/4121607 to your computer and use it in GitHub Desktop.
Quick extension to PDO that Makes Life Easier(TM)
<?php
class DB extends PDO {
function __construct($dsn, $user = NULL, $password = NULL) {
$params = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
PDO::ATTR_PERSISTENT => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
parent::__construct($dsn, $user, $password, $params);
}
function replace($table, array $data) {
return $this->insert($table, $data, TRUE);
}
function insert($table, array $data, $replace = FALSE) {
$fields = array_keys($data);
$values = array_fill(0, count($data), '?');
$sql = sprintf("%s INTO %s (%s) VALUES (%s)",
$replace ? 'REPLACE' : 'INSERT',
$table, implode(',', $fields), implode(',', $values));
$stmt = $this->prepare($sql);
if( $stmt->execute(array_values($data)) ) {
return $this->lastInsertId();
}
return FALSE;
}
function insert_or_update($table, array $data, array $id_fields) {
// Build insert
$params = array_values($data);
$fields = array_keys($data);
$values = array_fill(0, count($data), '?');
$sql = sprintf("INSERT INTO %s (%s) VALUES (%s)",
$table, implode(',', $fields), implode(',', $values));
// Or update when duplicate key
$set = array();
foreach( $data AS $k => $v ) {
if( in_array($k, $id_fields) ) continue;
$set[] = sprintf("%s = ?", $k);
$params[] = $v;
}
$sql .= ' ON DUPLICATE KEY UPDATE ' . implode(',', $set);
$stmt = $this->prepare($sql);
$stmt->execute($params);
$id = $this->lastInsertId();
return $id;
}
function update($table, array $where, array $data) {
$set = array();
$params = array();
foreach( $data AS $k => $v ) {
$set[] = sprintf("%s = ?", $k);
$params[] = $v;
}
$db = Object('db');
$sql = sprintf("UPDATE %s SET %s WHERE %s", $table, implode(',',$set), implode(' AND ', $where));
$stmt = $db->prepare($sql);
$stmt->execute($params);
return $stmt->rowCount();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment