Lo que intentas hacer es una DBAL, busca en google con ese termino y veras muchas soluciones.
Esta desactualizado, pero
esta es una clase que hice hace bastante para tal fin.
Con respecto a tu código, yo lo haría así:
DbTable.php
Código PHP:
Ver original<?php
class DbTable {
const ERROR_CONNECTION = "No se pudo conectar a la base de datos.";
const ERROR_PREPARE_STMT = "Error %1\$n preparando la sentencia. %2\$s.";
const ERROR_BIND_PARAM = "Error al agregar los parametros a la sentencia.";
const ERROR_EXECUTE_STMT = "Error %1\$n ejecutando la sentencia. %2\$s.";
private static $_instance;
private $_table;
private $_stmt;
public $props = [];
public function __construct($table) {
self::$_instance = new mysqli("localhost", "root", "", "database");
if(self::$_instance->connect_errno)
throw new Exception(self::ERROR_CONNECTION);
else
self::$_instance->set_charset("utf8");
}
$this->_table = $table;
}
public function flush() { $this->_stmt->close();
$this->_stmt = null;
}
$this->props = [];
return $this;
}
public function insert() {
return self::$_instance->insert_id;
}
public function exec($query = "", $params = []) { if(!($this->_stmt = self::$_instance->prepare($query)))
throw new Exception
(sprintf(self::ERROR_PREPARE_STMT, self::$_instance->errno, self::$_instance->error)); elseif($params) {
$bind_params = array(""); foreach($params as &$param) {
case "integer": case "boolean": $bind_params[0] .= "i"; break;
case "double" : $bind_params[0] .= "d"; break;
case "blob" : $bind_params[0] .= "b"; break;
default : $bind_params[0] .= "s"; break;
}
$bind_params[] = &$param;
}
throw new Exception(self::ERROR_BIND_PARAM);
}
}
if(!$this->_stmt->execute())
throw new Exception
(sprintf(self::ERROR_EXECUTE_STMT, self::$_instance->error, self::$_instance->errno)); else {
$result = [];
if($registros = $this->_stmt->get_result()) {
while($registro = $registros->fetch_array(MYSQLI_ASSOC))
$result[] = $registro;
}
}
return $result;
}
}
Uso:
Código PHP:
Ver originalrequire("DbTable.php");
try {
$usuarios = new DbTable("usuarios");
$usuarios->props["cliente"] = "Manolito";
$usuarios->props["password"] = "1234";
$usuarios->props["edad"] = 22;
echo "Se inserto el registro: ".$insert->insert();
} catch(Exception $e) {
echo "Error: " . $e->getMessage();
}