I wrote this class to make it reusable in any project. It uses PDO as the MySQL connection. Beside not using Setters and Getters, is this code secure and good practice for CRUD?
class ContactsRow
{
const PDO_CHARSET = PDO_CHARSET;
const PDO_DBNAME = PDO_DBNAME;
const PDO_DRIVER = PDO_DRIVER;
const PDO_HOSTNAME = PDO_HOSTNAME;
const PDO_PASSWORD = PDO_PASSWORD;
const PDO_USERNAME = PDO_USERNAME;
const CURRENT_TIMESTAMP = CURRENT_TIMESTAMP;
const PHP_AUTH_USER = PHP_AUTH_USER;
protected $id = null;
public $name = null;
public $email = null;
public $filename = null;
public $created_by = self::PHP_AUTH_USER;
public $modified_by = self::PHP_AUTH_USER;
public $date_created = null;
public $date_modified = null;
public $published = 1;
public $publish_up = null;
public $publish_down = null;
public $ordering = null;
/**
* Getters for Protected Vars
**/
public function getId()
{
return (int)$this->id;
}
/**
* Save
* @return boolean $query
*/
public function save()
{
if(! (isset($_SESSION['errors']) AND !empty($_SESSION['errors']))){
$db = new PDO(self::PDO_DRIVER . ':host=' . self::PDO_HOSTNAME . ';dbname=' . self::PDO_DBNAME, self::PDO_USERNAME, self::PDO_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . self::POD_CHARSET));
$values = array(
':name' => $this->id_parent,
':email' => $this->email,
':filename' => $this->filename,
':created_by' => self::PHP_AUTH_USER,
':modified_by' => $this->modified_by,
':date_created' => $this->date_created,
':date_modified' => self::CURRENT_TIMESTAMP,
':published' => $this->published,
':publish_up' => $this->publish_up,
':publish_down' => $this->publish_down,
':ordering' => $this->ordering,
':id' => $this->id
);
if((int)$this->id > 0){
$sql = '
UPDATE contacts
SET
name = :name,
email = :email,
filename = :filename,
created_by = :created_by,
modified_by = :modified_by,
date_created = :date_created,
date_modified = :date_modified,
published = :published,
publish_up = :publish_up,
publish_down = :publish_down,
ordering = :ordering
WHERE 1
AND id = :id
LIMIT 1
';
$stmt = $db->prepare($sql);
$query = $stmt->execute($values);
}else{
$sql = '
INSERT INTO contacts
SET
name = :name,
email = :email,
filename = :filename,
created_by = :created_by,
modified_by = :modified_by,
date_created = :date_created,
date_modified = :date_modified,
published = :published,
publish_up = :publish_up,
publish_down = :publish_down,
ordering = :ordering,
id = :id
';
$stmt = $db->prepare($sql);
$query = $stmt->execute($values);
$this->id = $db->lastInsertId();
}
$db = null;
return (bool)$query;
}
return false;
}
/**
* Delete
* @return boolean $query
*/
public function delete()
{
if((int)$this->id > 0){
$db = new PDO(self::PDO_DRIVER . ':host=' . self::PDO_HOSTNAME . ';dbname=' . self::PDO_DBNAME, self::PDO_USERNAME, self::PDO_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . self::POD_CHARSET));
$sql = '
DELETE t, tt
FROM contacts AS t
WHERE 1
AND t.id = :id
';
$stmt = $db->prepare($sql);
$query = $stmt->execute(array(
':id' => $this->id
));
$db = null;
return (bool)$query;
}
return false;
}
/**
* fetchRow
* @return $this
*/
public function fetchRow($id = null)
{
$db = new PDO(self::PDO_DRIVER . ':host=' . self::PDO_HOSTNAME . ';dbname=' . self::PDO_DBNAME, self::PDO_USERNAME, self::PDO_PASSWORD, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . self::POD_CHARSET));
$sql = '
SELECT *
FROM contacts
WHERE 1
AND id = :id
LIMIT 1
';
$stmt = $db->prepare($sql);
$stmt->execute(array(
':id' => (int)$id
));
if($row = $stmt->fetch(PDO::FETCH_OBJ)){
foreach($row as $i => $e){
if($e != "") $this->{$i} = $e;
}
}
$db = null;
return $this;
}
}