NotAnOrm.php
<?php
namespace Tlf;
class NotAnOrm {
protected $pdo;
public function __construct($pdo){
$this->pdo = $pdo;
}
public function createTable($table){
$class = ucfirst($table);
$file = $class.'.php';
require_once(__DIR__.'/'.$file);
$class = "\\Tlf\\$class";
$this->execute($class::createTable());
}
public function execute($sql, ?array $binds=null){
return $this->query($sql, $binds);
}
public function query($sql, ?array $binds=null){
$pdo = $this->pdo;
$stmt = $pdo->prepare($sql);
$stmt->execute($binds);
$rows = $stmt->fetchAll(\PDO::FETCH_ASSOC);
return $rows;
}
public function sql($tableName, $queryName){
$class = ucfirst($tableName);
require_once(__DIR__.'/'.$class.'.php');
$class = '\\Tlf\\'.$class;
$sql = $class::getSql($queryName);
$items = $this->execute($sql);
return $items;
}
public function selectOne($tableName, $requiredValues=[]){
return $this->select($tableName, $requiredValues)[0];
}
public function select($tableName, $requiredValues=[]){
$sql = "SELECT * FROM `${tableName}` ";
if (is_string($requiredValues)){
echo "dont care yet";
// $stmt .= $requiredValues;
// $rows = $this->query($stmt);
// return;
}
else {
$binds = [];
$params = [];
foreach ($requiredValues as $key=>$value){
$binds[":$key"] = $value;
$joiner = '=';
if (is_string($value)){
$joiner = ' LIKE ';
}
$keySql = "`$key` $joiner :$key";
$params[] = $keySql;
}
$whereStr = "WHERE ".implode(' AND ', $params);
$sql .= $whereStr;
print_r($sql);
print_r($binds);
$rows = $this->query($sql, $binds);
$items = $this->rowsToObjects($tableName, $rows);
return $items;
}
}
public function rowsToObjects($table, $rows){
$class = ucfirst($table);
$class = "\\Tlf\\${class}";
$items = [];
foreach ($rows as $row){
$items[] = new $class($row);
}
return $items;
}
public function create($tableName, $starterValues){
$cols = [];
$binds = [];
foreach ($starterValues as $key=>$value){
$cols[] = $key;
$binds[":{$key}"] = $value;
}
$colsStr = '`'.implode('`, `',$cols).'`';
$bindsStr = implode(', ', array_keys($binds));
$stmt = "INSERT INTO `${tableName}`(${colsStr})
VALUES (${bindsStr})
";
$this->execute($stmt, $binds);
}
static public function new($user, $password, $db, $host='localhost'){
$pdo = new \PDO("mysql:dbname=${db};host=${host}", $user, $password);
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$nao = new static($pdo);
return $nao;
}
}