<?php
abstract class db {
  protected static 
$dbh false;

  function 
connect() {
    
self::$dbh = new PDO('mysql:host=localhost;dbname=slowgeek','foo','bar'
                          array(
PDO::ATTR_PERSISTENT => true,
                                
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
                                
PDO::ATTR_EMULATE_PREPARES => true));
    
self::$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
  }

  protected function 
fatal_error($msg) {
    echo 
"<pre>Error!: $msg\n";
    
$bt debug_backtrace();
    foreach(
$bt as $line) {
      
$args var_export($line['args'], true);
      echo 
"{$line['function']}($args) at {$line['file']}:{$line['line']}\n";
    }
    echo 
"</pre>";
    die();
  }
}

class 
twitter extends db {

  function 
save($record) {
    if(
$record['u_id']==0) return false;
    if(!
self::$dbh$this->connect();
    try {
      
$stmt self::$dbh->prepare('REPLACE INTO twitter (u_id,name,state,token,secret,description)
                       VALUES (:u_id,:name,:state,:token,:secret,:description)'
);
      
$params = array(':u_id'=>$record['u_id'],
                      
':name'=>$record['name'],
                      
':state'=>$record['state'],
                      
':token'=>$record['token'],
                      
':secret'=>$record['secret'],
                      
':description'=>$record['description']);
      
$stmt->execute($params);
    } catch (
PDOException $e) {
      
$this->fatal_error($e->getMessage());
    }
    return 
true;
  }

  function 
update($record) {
    if(
$record['u_id']==0) return false;
    if(!
self::$dbh$this->connect();
    try {
      
$q "UPDATE twitter SET ";
      foreach(
$record as $k=>$v) {
        if(
$k=='u_id') continue;
        
$q .= "$k=?,";
      }
      
$q trim($q,",");
      
$stmt self::$dbh->prepare("$q where u_id={$record['u_id']}");
      
$i=1;
      foreach(
$record as $k=>$v) {
        if(
$k=='u_id') continue;
        
$stmt->bindParam($i$record[$k]);
        
$i++;
      }
      
$stmt->execute();
    } catch (
PDOException $e) {
      
$this->fatal_error($e->getMessage());
    }
  }
  
  function 
load($u_id,$all=false) {
    if(!
self::$dbh$this->connect();
    try {
      
$u_id self::$dbh->quote($u_id);
      
$result self::$dbh->query("SELECT * from twitter where u_id = $u_id");
      
$row $result->fetch(PDO::FETCH_ASSOC);
      return 
$row;
    } catch (
PDOException $e) {
      
$this->fatal_error($e->getMessage());
    }
    return 
false;
  }

  function 
touch($u_id) {
    if(!
self::$dbh$this->connect();
    try {
      
$u_id self::$dbh->quote($u_id);
      
$result self::$dbh->query("update twitter set mtime=CURRENT_TIMESTAMP where u_id=$u_id");
    } catch (
PDOException $e) {
      
$this->fatal_error($e->getMessage());
    }
  }

  function 
remove($u_id) {
    if(!
self::$dbh$this->connect();
    try {
      
$u_id mysql_real_escape_string($u_id);
      
$result self::$dbh->query("DELETE from twitter where u_id = '$u_id'");
    } catch (
PDOException $e) {
      
$this->fatal_error($e->getMessage());
      return 
false;
    }
    return 
true;
  }

}