Bueno de hace tiempo atras tuve esta inquietud es algo básico para empezar, antes debo dar gracias a Razo Duke12
que anteriormete ya se habia encaminado con esto de como acceder a store procedures en mysql desde php, cito el post,Mysqli – Mysql – PHP – Stored Procedures. en lo particular la idea era acceder sin usar Mysqli y aprovechar las bondades de ADODB(como capa de abstracción de datos).Gracias a Duke12 que me brindo su ayuda. Luego de esta corta introducción describimos lo hasta ahora logrado.
1. descargar ADODB copiar la carpeta dentro el direcctorio que contiene nuestro proyeto
para los ubunteros : ~$ sudo mv adodb.xxx /opt/lampp/htdocs/poo_php (este path es por que configure php,apache,mysql con XAMMP en este enlace se detalla su configuración en ubuntu ).
2. Creamos la base de datos ejemplo en mysql y dentro de ella la tabla EMPLEADOS y luego el store procedure
– Estructura de tabla para la tabla `empleados`
CREATE TABLE `empleados` (
`id_empleado` int(5) NOT NULL auto_increment,
`nombre` varchar(200) collate latin1_general_ci NOT NULL,
`direccion` varchar(200) collate latin1_general_ci NOT NULL,
`edad` int(5) NOT NULL,
`email` varchar(200) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id_empleado`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=4 ;
–
– Volcar la base de datos para la tabla `empleados`
–
INSERT INTO `empleados` VALUES (1, ‘Isabel’, ‘tucuman 565′, 2, ‘isabel_vr@hotmail.com’);
INSERT INTO `empleados` VALUES (2, ‘Olga’, ‘tucuman 565′, 28, ‘olgars_2@hotmail.com’);
INSERT INTO `empleados` VALUES (3, ‘Kathy’, ‘tucuman 565′, 7, ‘kathya@hotmail.com’);
INSERT INTO `empleados` VALUES (4, ‘Gilmer’, ‘tucuman 565′, 30, ‘gilmerv@gmail.com’);
– ——————————————————–
– creamos el store procedure PRO_LEE_EMPLEADOS()
DELIMITER $$
DROP PROCEDURE IF EXISTS `ejemplo`.`PRO_LEE_EMPLEADOS`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_LEE_EMPLEADOS`()
BEGIN
select * from empleados;
END$$
DELIMITER ;
3. creamos la clase para la conexión (class BaseDatos):cls_conexionDB.php
<?php
include(‘adodb/adodb.inc.php’);
class BaseDatos
{
var $row;
var $conn;
var $dbdriver;
var $servidor;
var $usuario;
var $contraseña;
var $database;
var $DB;
function baseDatos(){
$this->dbdriver=’mysql’;
$this->servidor = “localhost”;
$this->usuario = “root”;
$this->pass = “”;
$this->database= “ejemplo”;
$this->conn = $this->conectar()
;
}
function conectar(){
$dsn = “$this->dbdriver://$this->usuario:$this->pass@$this->servidor/$this->database?clientflags=65536″;
$this->DB = NewADOConnection($dsn);
if ( !$this->DB ) die(“No se establecio la conexion – $dsn”);
$this->DB->SetFetchMode(ADODB_FETCH_ASSOC);
return $this->DB;
}
function consulta($sql1)
{
$rs = $this->conn->Execute($sql1);/*ejecutamos el query*/
return $rs;
}
function Execute($query=’select now()’){
$this->row = $this->DB->Execute($query) or die ($this->DB->ErrorMsg());
}
function FetchAll($query){
$this->Execute($query);
while(!$this->row->EOF){
$temp[] = $this->row->fields;
$this->row->MoveNext();
$this->bbdd_desc();
}
return $temp;
}
function resultado($rs)
{
if ($rs)
while ($row = $rs->GetRows()) /*armamos el arreglo con los datos obtenidos de la consulta*/
{
return $row;
}
}
function numeroFilas($rs)
{
$cant = $rs->RecordCount();
return $cant;
}
function numeroColumnas
($rs)
{
$nuncolum=$rs->FieldCount();
return $nuncolum;
}
function nombreCampo($table)
{
return $this->conn->MetaColumnNames($table);
}
public function bbdd_desc()
{
return $this->DB->Close();
}
}
?>
4. por último creamos el script para probar nuestra clase test_conexionDB.php
<?
include ‘cls_conexionDB.php’; //importo la clase
$b = new BaseDato
s();
$sql1 = ‘SELECT * FR
OM empleados’;
echo $sql1;
$r = $b->consulta($sql1);
$canti= $b->nu
meroFilas($r);
$result= $b->resultado($r);
$tabla=’empleados’;
$nombrecampos= $b->nombreCampo($tabla);
$cantcol=$b->numeroColumnas($r);
echo “<p><b>RESUL
TADO ANTES DE USAR STORE PROCEDURE<b></P>”;
echo “<table border=0 cellspacing=2 cellpadding=2 style=’border:1px solid red; background-color:transparent’>”;
echo “<tr style=’color:#B5360B’ >”;
foreach ($nombreca
mpos as $valor){
print “<td><b>”. strtoupper($valor) . “</b></td>”;
}
echo “</tr>”;
foreach ($result as $valor){
echo “<tr>”;
print “<td>”. $valo
r['id_empleado'] . “</td>”;
print “<td>”. $valor['nombre'] . “</td>”;
print “<td>”. $valor['direccion'] . “</td>”;
print “<td>”. $valor['edad'] . “</td>”;
print “<td>”. $
valor['email'] . “</td>”;
echo “</tr>”;
}
echo “</table><br>”;
$SQL=”CALL PRO_LEE_EMPLEADOS()”;
echo $SQL;
$rs=$b->FetchAll($SQL);
echo “<p><b>RESULTADO USANDO STORE PROCEDURE</b></P>”;
echo “<table border=
0 cellspacing=2 cellpadding=2 style=’border:1px solid blue; background-color:transparent’><br>”;
?>
<tr align=”center” style=’color:blue’>
<td><b>ID EMPLEADO</b></td>
<td><b>NOMBRE <
/b></td>
<td><b>DIRECCION </b></td>
<td ><b>EDAD </b></td>
<td><b>EMAIL </b
></td>
</tr>
<?
foreach ($rs as $valor_sp){
echo “<tr >”;
print “<td>”.$valor_sp['id_empleado'] . “</td>”;
print “<td>”. $valor_sp['nombre'] . “</td>”;
print “<td>”. $valor
_sp['direccion'] . “</td>”;
print “<td>”. $valor_sp['edad'] . “</td>”;
print “<td>”. $valor_sp['email'] . “</td>”;
echo “</tr>”;
}
echo “</table>”;
echo “MAS CONSULTAS”
$consultaAdd1 = new BaseDatos();
$SQL=”CALL PRO_LEE_EMPLEADOS()”;
$rs1=$consultaAdd1->FetchAll($SQL);
echo “<pre>”;
print_r($rs1);
echo “<pre><br/>”;
$consultaAdd2 = new BaseDatos();
$SQL=”CALL PRO_LEE_EMPLEADOS()”;
$rs2=$consultaAdd2->FetchAll($SQL);
echo “<pre>”;
print_r($rs2);
echo “<pre><br/>”;
?>
capturas de pantalla ;


