Hola genios de la web. Les comento que tengo un proyecto que funciona bárbaro en mi web, pero necesito mejorarlo porque trata ahora de una Clase para conexión MySQL con PHP y PDO para varias clases.
Por ejemplo este es mi proyecto:
Código PHP:
class Helper {
//Propiedades
private static $host = 'localhost';
private static $user = 'root';
private static $pass = '';
private static $dbname = 'menu_url';
private static $dbh;
private static $error;
private static $router;
public static function construct(){
// Set DSN -- Donde se conecta
$dsn = 'mysql:host=' . self::$host . ';dbname=' . self::$dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace, crear el objeto de acceso a base de datos
try{
self::$dbh = new PDO($dsn, self::$user, self::$pass, $options);
//funcion para crear el menu desde la base de datos
self::setRouter();
}
// Catch any errors
catch(PDOException $e){
self::$error = $e->getMessage();
}
}
public static function setRouter() {//Le cargo a 'router' los valores de inicialización
$array = array();
$stmt = self::$dbh->prepare('SELECT * FROM url');//stmt = statement = Sentencia, consulta
$stmt->execute();
// Luego recorres el juego de resultados:
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$array[$row['arrayUrl_name']] = array('column' => $row['arrayUrl_column'],'content' => $row['arrayUrl_content']);
// Asignas la columna sólo si es necesaria
if($row['arrayUrl_column'] != '')
{
//$array[$row['arrayUrl_name']]['arrayUrl_column'] = $row['arrayUrl_column'];
}
}
self::$router = $array;
}
/*
// Finalmente compruebas si el array se creó correctamente
var_dump($array);
// Si todo va bien, eliminas estas últimas líneas
*/
public static function getColumn($file = null ) {
self::construct();
if (array_key_exists($file, self::$router) && isset(self::$router[$file]['column'])) {
ob_start();
if(is_file(self::$router[$file]['column']))
require_once(self::$router[$file]['column']);
return ob_get_clean();
}
}
public static function getContent($file = null) {
self::construct();
if (array_key_exists($file, self::$router) && is_file(self::$router[$file]['content'])) {
ob_start();
require_once(self::$router[$file]['content']);
return ob_get_clean();
}
}
}
No se cómo adaptar esa clase a este nuevo proyecto para usar una configuración externa para la conexión a la BD y usarla en varias clases:
configuracion.ini:
Código:
[database]
driver = mysql
host = localhost
port = 3306
schema = menu_url
username = root
password =
class.consultas.php:
Código PHP:
abstract class configuracion {
protected $datahost;
protected function conectar($archivo = 'configuracion.ini'){
if (!$ajustes = parse_ini_file($archivo, true)) throw new exception ('No se puede abrir el archivo ' . $archivo . '.');
$controlador = $ajustes["database"]["driver"]; //controlador (MySQL la mayoría de las veces)
$servidor = $ajustes["database"]["host"]; //servidor como localhost o 127.0.0.1 usar este ultimo cuando el puerto sea diferente
$puerto = $ajustes["database"]["port"]; //Puerto de la BD
$basedatos = $ajustes["database"]["schema"]; //nombre de la base de datos
try{
return $this->datahost = new PDO (
"mysql:host=$servidor;port=$puerto;dbname=$basedatos",
$ajustes['database']['username'], //usuario
$ajustes['database']['password'], //constrasena
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
);
}
catch(PDOException $e){
echo "Error en la conexión: ".$e->getMessage();
}
}
}
Por ejemplo de clase que debería reemplazar con la clase "Helper":
Código PHP:
class Persona
{
private $personas;
public function obtenerPersonas(){
$consulta = "SELECT * FROM personas";
$valores = null;
$oConectar = new conectorDB; //instanciamos conector
$this->personas = $oConectar->consultarBD($consulta,$valores);
return $this->personas;
} //Termina funcion obtenerPersonas();
public function registrarPersonas($nombre,$apellido,$edad){
$registrar = false; //creamos una variable de control
$consulta = "INSERT INTO personas
VALUES (:nombre, :apellido, :edad)";
//VALORES PARA REGISTRO
$valores = array("nombre"=>$nombre,
"apellido"=>$apellido,
"edad"=>$edad);
$oConexion = new conectorDB; //instanciamos conector
$registrar = $oConexion->consultarBD($consulta, $valores);
if($registrar !== false){
return true;
}
else{
return false;
}
} //Termina funcion registrarUsuarios()
}/// TERMINA CLASE USUARIOS ///
Ojalá puedan ayudarme amigos!