Hola amigo te dejare un regalito:
1. defino las constante de coneccion a la base de datos en un archivo especifico de Constantes de Sistema:
Código :
<?php
if (!defined('CONECTOR_DB')) define('CONECTOR_DB' ,'PDO');
if (!defined('DB_HOST')) define('DB_HOST' ,'localhost');
if (!defined('DB_USERNAME')) define('DB_USERNAME' ,'root');
if (!defined('DB_PASS')) define('DB_PASS' ,'');
if (!defined('DB_PRE')) define('DB_PRE' ,'TEST');
if (!defined('DB_N_SEC')) define('DB_N_SEC' ,'USER');
if (!defined('DB_PORT')) define('DB_PORT' ,'3306');
?>
2. Creo una Libreria de Gestion de Bases de Datos donde puedo manejar todo el codigo con respecto a esto:
Código :
<?php
class Class_BDManager{
# ============================================================================================
function __construct(){
# Contructior de la clase (No usado).
}
# ============================================================================================
# funcion de Coneccion a la base de datos
function Open_Con_DB($dbUsing){
switch (CONECTOR_DB){
case 'MySQLi': # Conector para MySQLi
$error = [];
$error['dberror']='no';
$dblink = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASS); # verificar donde se incluye el puerto
$selected = mysqli_select_db($dblink,DB_PRE.$dbUsing); # verificar donde se incluye el puerto
if (!$selected) { $error = $this ->errorDB($dblink); } # Verificacion de Errores de Coneccion a la base de Datos
try {
if($error['dberror']=='si'){
throw new Exception('A ocurrido un Error De coneccion a la Base de Datos.<br>'.$error['msg']);
}
} catch (Exception $e) {
echo 'Error: '.$e->getMessage().'<br>';
die('Proceso Cancelado');
}
$dblink ->query("SET NAMES 'utf8'"); # Enlace de Coneccion UTF-8
return $dblink;
break;
case 'Oracle': # Conector para Oracle
echo'no se puede utilizar este procedimiento';
break;
case 'PostGre': # Conector para PostGre
echo'no se puede utilizar este procedimiento';
break;
case 'SQL': # Conector para SQL
echo'no se puede utilizar este procedimiento';
break;
case 'PDO': # Conector para PDO
echo'no se puede utilizar este procedimiento';
break;
}
}
#Funcion de Desconeccion a la base de datos.
function Close_Con_DB($dblink){
switch (CONECTOR_DB){
case 'MySQLi': # Desconector para MySQLy
mysqli_close($dblink);
break;
case 'Oracle': # Desconector para Oracle
echo'no se puede utilizar este procedimiento';
break;
case 'PostGre': # Desconector para PostGre
echo'no se puede utilizar este procedimiento';
break;
case 'SQL': # Desconector para SQL
echo'no se puede utilizar este procedimiento';
break;
case 'PDO': # Desconector para PDO
echo'no se puede utilizar este procedimiento';
break;
default: # otros
echo'no Existe una coneccion establecida';
}
}
# Funcion para generar Errores de Coneccion MySQLi
function ErrorDB($dblink){
$error['msg']= 'Indicacion: '.mysqli_error($dblink);
$error['dberror']= 'si';
return $error;
}
# insertar datos a BD
function BDinsertar($dbquery,$dbUsing){
$dblink = $this -> Open_Con_DB($dbUsing);
mysqli_query($dblink,$dbquery) or $this -> errorDB($dblink);
$this -> Close_Con_DB($dblink);
}
#Insertar Multiples Datos tablas diferentes
function BDinsertarM($dbquery,$dbUsing){
$dblink = $this -> Open_Con_DB($dbUsing);
mysqli_multi_query($dblink,$dbquery) or
$this -> errorDB($dblink);
$this -> Close_Con_DB($dblink);
}
# Obtener datos de la base de datos
function BDquery($dbquery,$dbUsing){
$dblink = $this -> Open_Con_DB($dbUsing);
$datos = mysqli_query($dblink,$dbquery) or $this -> errorDB($dblink);
$this -> Close_Con_DB($dblink);
return $datos;
}
# ordenar busquedas
function BDarreglar($datos){
$arreglo = mysqli_fetch_array($datos);
return $arreglo;
}
# ordenar busquedas
function BDasociar($datos){
$arreglo = mysqli_fetch_assoc($datos);
return $arreglo;
}
# ordenar busquedas
function BDListar($datos){
$arreglo = mysqli_fetch_row($datos);
return $arreglo;
}
#Ordena Busqueda
function DBFilas($datos){
$result = mysqli_num_rows($datos);
return $result;
}
#Cerrar Filtro
function BDCquery($datos){
mysqli_free_result($datos);
}
#Obtiene la informacion de la tabla
function BDInfo($dbtable,$dbUsing){
$dbquery = "show columns from $dbtable;";
$dblink = $this -> Open_Con_DB($dbUsing);
$datos = mysqli_query($dblink,$dbquery) or $this -> errorDB($dblink);
$this -> Close_Con_DB($dblink);
return $datos;
}
# ============================================================================================
#Funciones especificas para obtener datos de la DB en especial datos informativos y filtros
function BDqueryFirstMissingINT($stmtpre,$dbUsing){ #Search Missing Lado PHP
$data = $this -> BDquery($stmtpre, $dbUsing);
$row = $this -> BDarreglar($data);
$count = 0;
while($row = mysqli_fetch_array($data)){
$count++;
$value = (int)$row[0];
if($value!==$count){
$result = $count;
break;
}
}
return $result;
}
#Obtiene el Siguiente ID logico Faltante en forma compleja Consulta largas
function BDqueryFirstMissingINTComplex($stmtpre,$dbUsing){ #Search Missing Lado Mysql para Consulta Largas
$data = $this -> BDquery($stmtpre, $dbUsing);
$row = $this -> BDarreglar($data);
$result = $row[0];
if($result==0){
$result = 1;
}
return $result;
}
#Obtiene la llave de la tabla funciona si la llabe de la tabla tiene un pattern especifico
function DBGetKeyTBName($dbUsing,$dbtable){
$data = $this -> BDInfo($dbtable,$dbUsing);
$QIstring = $this -> BDarreglar($data);
$pattern = '/\b([^,]*KeyIdT[^,]*)\b/';
preg_match_all($pattern, $QIstring[0], $KeyIdTs, PREG_SET_ORDER);
foreach($KeyIdTs as $val){
$KeyIdT = $val[1];
}
return $KeyIdT;
}
#Obtiene el Siguiente ID
function GetNextID($stmtpre,$DB){
$result = $this -> BDqueryFirstMissingINTComplex($stmtpre,$DB);
return $result;
}
#Obtiene el Siguiente ID logico
function GetNextIDLogico($dbUsing,$stmtpre,$key){
$result = 1;
$data = $this -> BDquery($stmtpre, $dbUsing);
$result_exist = $data -> num_rows;
if($result_exist<=0){
$result = 1;
}else{
$row = $this -> BDasociar($data);
$result = (int)$row["$key"]+1;
}
return $result;
}
#sin desarrollar
function ListTable($DB,$Pattern){
}
# ============================================================================================
#PDO Estructure Single DataBase
public function PDOInsertM($dbUsing,$stmtpre){
$started = microtime(true);
$DB =[];
$val =[];
$conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_PRE."".$dbUsing."", DB_USERNAME,DB_PASS);
$c =0;
foreach($stmtpre as $stmt){
preg_match('/\binto\b\s*(\w+)/i',$stmt,$tables);
$stmt = "SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".DB_PRE."$dbUsing' AND TABLE_NAME = '".$tables[1]."';";
$r = $conn->query($stmt);
while ($row = $r->fetch(PDO::FETCH_ASSOC)){
$val[$c] = $row["AUTO_INCREMENT"];
}
$c++;
}
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
// set the PDO error mode to exception
$stmt ='';
// begin the transaction
$conn ->beginTransaction();
$count =0;
// our SQL statements
foreach($stmtpre as $stmt){
//echo $stmt."<br><br><br>";
$count++;
$conn -> exec($stmt);
}
// commit the transaction
$conn -> commit();
$DB['SMG']= "Registro Correcto";
$DB['R'] = true; #existe registro si
}catch(PDOException $e){
// roll back the transaction if something failed
$conn -> rollback();
$conn -> beginTransaction();
#rollback del auto_increment
foreach($stmtpre as $stmt){
preg_match('/\binto\b\s*(\w+)/i',$stmt,$tables);
$conn->exec("ALTER TABLE ".$tables[1]." AUTO_INCREMENT = ".$val[0].";");
}
$conn -> commit();
$DB['SMG'] ="Error en Tiempo de Ejecucion: " . $e->getMessage();
$DB['R'] =false;
}
$conn = null;
$end = microtime(true);
$difference = $end - $started;
$queryTime = number_format($difference, 10);
$DB['T'] = "Tiempo de Ejecucion de las consultas MySQL: $queryTime ";
$DB['S'] = "Se Realizaron $c Registros en la base de datos.";
return $DB;
}
public function PDOUpdateM($dbUsing,$stmtpre){
$started = microtime(true);
$DB =[];
$conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_PRE."".$dbUsing."", DB_USERNAME,DB_PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
// set the PDO error mode to exception
$stmt ='';
// begin the transaction
$conn ->beginTransaction();
$count =0;
$c=0;
// our SQL statements
foreach($stmtpre as $stmt){
//echo $stmt."<br><br><br>";
$count++;
$conn -> exec($stmt);
$c++;
}
// commit the transaction
$conn -> commit();
$DB['SMG']= "Registro Correcto";
$DB['R'] = true; #existe registro si
}catch(PDOException $e){
// roll back the transaction if something failed
$conn -> rollback();
$conn -> beginTransaction();
#rollback del auto_increment
$conn -> commit();
$DB['SMG'] ="Error en Tiempo de Ejecucion: " . $e->getMessage();
$DB['R'] =false;
}
$conn = null;
$end = microtime(true);
$difference = $end - $started;
$queryTime = number_format($difference, 10);
$DB['T'] = "Tiempo de Ejecucion de las consultas MySQL: $queryTime ";
$DB['S'] = "Se Realizaron $c Registros en la base de datos.";
return $DB;
}
#PDO CSV Volcado
public function PDO_UL_IUPD($dbUsing,$stmtpre){
$started = microtime(true);
$DB =[];
$val =[];
$conn = new PDO(
"mysql:host=".DB_HOST.";dbname=".DB_PRE."".$dbUsing."",
DB_USERNAME,
DB_PASS,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => TRUE,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8",
PDO::ATTR_EMULATE_PREPARES => FALSE,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$conn -> beginTransaction();
$count =0;
// our SQL statements
foreach($stmtpre as $stmt){
//echo $stmt."<br><br><br>";
$count++;
$conn -> exec($stmt);
}
$conn -> commit();
$DB['SMG'] = "Ejecucion Correcta.";
$DB['R'] = true;
}catch(PDOException $e){
$DB['SMG'] = "Error en Tiempo de Ejecucion: " . $e->getMessage();
$DB['R'] = false;
}
return $DB;
}
}
?>
3. La implementacion recomiendo hacerle include en la cabecera de la Aplicacion en lo mar arriba del Index, en todas las clases donde las vas a usar tienes que instanciarlas de la siguiente manera:
Código :
class Ejemplo1consultadirecta{
# ============================================================================================
public function __construct(){
$this -> DBMANAGER = new Class_BDManager();
}
function funcejemplo(){
$stmtpre = "SELECT datos FROM tabla WHERE dato='$dato'" ;
$data1 = $this -> DBMANAGER -> BDquery($stmtpre, DATABASE);
$data = $this -> DBMANAGER -> BDasociar($data1);
}
}
Código :
class Ejemplo1consultabucle{
# ============================================================================================
public function __construct(){
$this -> DBMANAGER = new Class_BDManager();
}
function funcejemplo(){
$stmtpre = "SELECT datos FROM tabla WHERE dato='$dato'" ;
$data1 = $this -> DBMANAGER -> BDquery($stmtpre, DATABASE);
#analisis
$i=1;
while($row1 = mysqli_fetch_assoc($data1)){
$StorageID[$i] = $row3['Sto_ID'];
$StorageNS[$i] = $row3['Sto_NameS'];
$StorageNL[$i] = $row3['Sto_NameL'];
$StorageVL[$i] = 0;
$i++;
}
}
}