Foros del Web » Programando para Internet » PHP »

Necesito guía para adaptar proyecto - Conexión de clase PDO

Estas en el tema de Necesito guía para adaptar proyecto - Conexión de clase PDO en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/09/2013, 00:08
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Necesito guía para adaptar proyecto - Conexión de clase PDO

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($dsnself::$userself::$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($fileself::$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($fileself::$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($archivotrue)) 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!

Etiquetas: php+arrays, php+base, php+base+de+datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:16.