jeudi 9 août 2012

Conexion PHP5 mysqli

Hola que tal, realmente antes de comenzar no sabia por donde hacerlo pero decidí que la mejor forma era mostrando les a ustedes una  clase que cree en PHP5 y msqli la cual nos permite realizar la conexión con base de datos, antes de mostrárselas quiero decirles que no esta concluida y que tiene detalle.
sin mas preámbulo vayamos al código.


<?php
/** @class: classConexion (PHP5-Strict with comments)
* @project: PHP clase classConexion
* @date: 07-15-2012
* @version: 0.0.1_php5
* @author: Victor Eduardo Sierra Cano
* @copyright: Victor Eduardo Sierra Cano
* @email: victorsierracano <at> gmail <dot> com
* @license: GNU General Public License (GPL)
*/
class classConexion{
//variables utilizadas para guardar la
private $conexion=NULL, //varible para guardar la conexion
$total_consultas=0, //variable para saber cuantos querys se realizan
$base='', // nombre de la base de datos a conectar
$user='', // nombre del usuario
$password='',     // la clave del utilizador
$port=5432,
$host='', // el host al que se conecta ej: 127.0.0.1
$manejador=1,
$idConexion="",
$errorCode=0;


/** creamos el constructor
    * metodo para inicializar la conexion
    *
    * @access public
    * @param string $base - recibe el nombre de la base a la que nos conectaremos
    * @param string $usuario - recibe el nombre del usuario con el que nos conectaremos ej. 'root'
    * @param string $pass - recibe la contrasenia de usuario con el cual se conecta
    * @param string $maquina - recibe el nombre de la maquina o direccion IP donde se conectara el usuario
    * @param int $driver - recibe el nombre de driver a utilizar ejemplo: MySQL=1,POSTGRESQL=2
    * @param int $port - recibe un int para asignar el numero de puerto del $driver
    * @return array $resultado -  retorna una conexion exitosa
    */
// public function __construct($base="a3757808_control",$usuario="usuario",$pass="mipass",$maquina="localhost",$driver=1,$port=5432){
public function __construct($base="control",$usuario="root",$pass="12345",$maquina="localhost",$driver=1,$port=5432){
//iniciacion de variables
$this->base = $base;  // nombre de la base de datos a conectar
$this->user =$usuario;   // nombre del usuario
$this->password =$pass;    // la clave del utilizador
$this->port=$port; // asignacion del numero de puerto para la conexion
$this->host = $maquina; // el host al que se conecta ej: 127.0.0.1
$this->manejador=$driver;

$this->seleccionarManejador($this->manejador);

}

/** creamos el entorno adecuada para trabajar con la base de datos
 * es decir: como localhost o en sobre nuestro servidor
    * metodo para inicializar la conexion
    * @access public
    * @param string $referenciaEntornoServidor - recibe el nombre del servidor donde se implantara el sistema ejemplo: "localhost"
    */
public function modificar_entorno_DB($referenciaEntornoServidor){
switch ($referenciaEntornoServidor){
case "localhost":
$this->hostName = "localhost";
$this->port = "5432";
$this->user = "usuarioNormal" ;
$this->password = "123456prueba";
$this->base = "curso";
break;
case "test":
$this->hostName = "";
$this->port = "";
$this->userName = "";
$this->password = "" ;
$this->base = "test";
break;
default:
// FATAL ERROR - DB REFERENCE UNDEFINED
}
}

private function seleccionarManejador($driver){
switch ($driver){
case  1:
//$this->conectar();
$this->conexion = new mysqli($this->host,$this->user,$this->password,$this->base);
//mysql_select_db($this->base,$this->conexion) or die("error en la conexion a la base de datos");

break;

case  2:
$connStr = '';
($this->host != '') ? ($connStr .= "host=" . $this->host . " ") : ($connStr = $connStr);
($this->port != '') ? ($connStr .= "port=" . $this->port . " ") : ($connStr = $connStr);
($this->base != '') ? ($connStr .= "dbname=" . $this->base . " ") : ($connStr = $connStr);
($this->user != '') ? ($connStr .= "user=" . $this->user . " ") : ($connStr = $connStr);
($this->password != '') ? ($connStr .= "password=" . $this->password . " ") : ($connStr = $connStr);
$connStr = trim($connStr);
$connID = @pg_connect($connStr);
if ($connID != "") {
$this->idConexion = $connID;
} else {
// FATAL ERROR - CONNECTI0N ERROR
$this->errorCode = -1;
$this->idConexion = -1;
}
break;
default:
//
break;

}
}

/**
    * metodo para realizar consultas
    * @access public
    * @param string $consulta - recibe un query
    * @return array $resultado -  retorna un array
    */
public function consulta($consulta){
$this->conexion->query("SET NAMES UTF8");
//mysql_query("SET NAMES UTF8");
++$this->total_consultas;

//$resultado = mysql_query($consulta);
$resultado = $this->conexion->query($consulta);
if(!$resultado){
$numError= $this->conexion->errno;
switch ($numError){
case 1062:
//print "Error en la llave primaria";
break;
case 1064:
//print "error en el query realizado verifique la sentencia "."<br><strong>\"".$consulta."\"</strong><br>";
break;
default:
//print "error en el query \" $consulta \" verifique su query ".mysql_errno();
break;
}
//$this->liberarConsulta($resultado);
}
return $resultado;
}

/**
    * metodo para realizar consultasPost
    * @access public
    * @param string $consulta - recibe un query
    * @return array $resultado -  retorna un array
    */
public function consultaPost($consulta){
//$this->consulta("set datestyle='ISO'");
//$this->consulta("set time zone 'PST'");

}
/**
    * metodo para un "select" generico
    * @access public
    * @param string $campos - recibe un string de los campos a seleccionar ejem: "id,grupo,nombre"
    * @param string $tabla - recibe el nombre de la tabla donde se obtendra los campos
    * @param string $clausulas - recibe las clausulas para el select
    * @return array $resultado -  retorna un array
    */
public function seleccionar($campos=array(),$tabla = '',$clausulas = ''){
$stringQuery  = "Select ";
$sqlColumnas  = "";
$sqlClausulas = "";
if(!empty($campos)){
for($iterador=0; $iterador<count($campos); ++$iterador){
    if($iterador == count($campos)-1){
    $sqlColumnas.= "".$campos[$iterador]."";
    }
    else{
    $sqlColumnas.= "".$campos[$iterador].", ";
    }
    }
    $stringQuery.= $sqlColumnas;
}else $stringQuery.= "*";
$stringQuery.=" from ".$tabla." ";
if ($clausulas !== '') $stringQuery.="where ".$clausulas.";";
$stringQuery.";";
$stringQuery;
return $resultado=$this->consulta($stringQuery);
}

function asociarResultado($resultado) {
return $resultado->fetch_assoc();
//return mysql_fetch_assoc($resultado);
}


/**
    * metodo para un "insert" generico
    * @access public
    * @param string $tabla - recibe un string de los campos a seleccionar ejem: "id,grupo,nombre"
    * @param string $datas - recibe el nombre de la tabla donde se obtendra los campos
    * @param string $clausulas - recibe las clausulas para el select
    * @return int $resultado -  retorna un int con 1 se realizo correctamente
    */
public function insertar($tabla,$columnas=array(),$datos=array()) {
$sql = "insert into $tabla";
$sqlColumnas= "";
$sqlValores = "";
    if (!empty($columnas)){
    $sqlColumnas=" (";
    for($iterador=0; $iterador<count($columnas); ++$iterador){
    //echo $iterador."<br>";
    if($iterador == count($columnas)-1){
    $sqlColumnas.="".$columnas[$iterador].") values (";
$sqlValores.="'".$datos[$columnas[$iterador]]."');";//$sqlValores.="'".$datos[$iterador]."');";
    }
    else{
    $sqlColumnas.="".$columnas[$iterador].", ";
    $sqlValores.="'".$datos[$columnas[$iterador]]."',";//$sqlValores.="'".$datos[$iterador]."',";
    }
    }
    $sql.= $sqlColumnas;
   
    }else{
    $sqlValores=" values(";
    for($iterador=0; $iterador<count($datos); ++$iterador){
    if($iterador == count($datos)-1){
    $sqlValores.="\"".$datos[$iterador]."\");";
    }
    else{
    $sqlValores.="'".$datos[$iterador]."',";
    }
    }
    }
    $sql.= $sqlValores;
    $this->consulta($sql);
    return $this->conexion->affected_rows;
    //return mysql_affected_rows();
   
}

/** UPDATE  `usuario` SET  `curp` =  '907543333335343' WHERE  `usuario`.`curp` =  '907543333335344' LIMIT 1
    * metodo para una "actualizacion" generico
    * @access public
    * @param string $tabla - recibe un string de los campos a seleccionar ejem: "id,grupo,nombre"
    * @param array $datos - recibe el nombre de la tabla donde se obtendra los campos
    * @param array columnas - recibe el array de las columnas a afectar
    * @param string $clausulas - recibe las clausulas para el select
    * @return int $resultado -  retorna un int con 1 se realizo correctamente
    */
public function actualizar($tabla,$columnas=array(),$datos=array(),$clausulas) {
$sql = "update $tabla set ";
$sql1= "";
$sql2=" ;";
    if (!empty($columnas)){
    for($iterador=0; $iterador<count($columnas); ++$iterador){
    if($iterador == count($columnas)-1){
    $sql1.=" ".$columnas[$iterador]." = '".$datos[$columnas[$iterador]]."' ";//$sql1.=" ".$columnas[$iterador]." = ".$datos[$iterador]." ";
    }
    else{
    $sql1.=" ".$columnas[$iterador]."= '".$datos[$columnas[$iterador]]."', ";
   
    }
    }
    if (!empty($clausulas) || $clausulas !== ''){
    $sql2=" where ".$clausulas."; ";
    }
    $sql.= $sql1.$sql2;
    $this->consulta($sql);
    return $this->conexion->affected_rows;
    //return mysql_affected_rows();
    }
}

public function eliminar($tabla,$clausula) {
$sql='DELETE FROM ';
$sql.=$tabla;
if (!empty($clausula)|| $clausula!=='') {
$sql.=' where '.$clausula.';';
}
$this->consulta($sql);
return $this->conexion->affected_rows;
//return mysql_affected_rows();
}

public function conectar(){
$this->conexion = mysql_connect($this->host,$this->user,$this->password) or die("Error en la Conexion");
}

/**
* @access public
    * nos servira para terminar con la conexion existente
    */
public function desconectar() {
$this->conexion->close();
//mysql_close($this->conexion);
}

/**
* @access public
* @param resource $consulta consulta para ser eliminada
*/
public function liberarConsulta($consulta) {
mysqli_free_result($consulta);
//mysql_free_result($consulta);
}

public function numeroResultadosSelect($resultado) {
return $resultado->num_rows;
//return mysql_num_rows($resultado);
}

/**
*
* @access public
* @return regresa un numero total de consultas hechas
*/
public function getTotalConsultas() {
return $this->total_consultas;
}

/**
*
* @access public
* @return regresa un numero total de consultas hechas
*/
public function getUltimoIdInsert() {
return $this->conexion->insert_id;
}
}


la clase esta documentada y espero que no haya ninguna duda

vayamos a la forma de utilización

primero tendremos que incluir el archivo
recuerden que todo depende de la ruta donde se encuentren

include("classConexion.php");

enseguida creamos la instancia hacia la clase

$conexion = new classConexion();

y basicamente su uso mas comun seria la consulta:

$resultado=$conexion->consulta("SELECT * FROM tabla"); 

lo cual nos devolverá un resultado

esto con un clásico while seria de la siguiente manera:

include("classConexion.php");
$conexion = new classConexion();
$resultado = $conexion->consulta("SELECT * FROM tabla");
 while ($filas = mysqli_fetch_assoc($resultado)) {
  echo " <tr> <td>".$filas['campo1']."</td></tr>";
}

bueno sin mas por el momento me despido, esperando sugerencias,quejas dudas.