Foros del Web » Programando para Internet » PHP »

ejecutar store procedure en mysql desde php

Estas en el tema de ejecutar store procedure en mysql desde php en el foro de PHP en Foros del Web. Hola a todos si alguien me puede dar una ayuda en esto. tengo un simple store procedure en mysql: CREATE PROCEDURE leeemp() BEGIN select * ...
  #1 (permalink)  
Antiguo 30/03/2007, 09:02
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 19 años, 8 meses
Puntos: 1
Pregunta ejecutar store procedure en mysql desde php

Hola a todos si alguien me puede dar una ayuda en esto. tengo un simple store procedure en mysql:

CREATE PROCEDURE leeemp()
BEGIN
select * from empleados;
END

el cual lo ejecuto desde php con el siguiente codigo

<?php
include('adodb/adodb.inc.php');

$dbdriver='mysql';
$servidor='localhost';
$usuario='root';
$contraseña='';
$database='ejemplo';
$db = ADONewConnection($dbdriver);
$db->Connect($servidor, $usuario, $contraseña, $database);
$rs = $db->Execute('CALL leeemp()');
print "<pre>";
print_r($rs->GetRows());
print "</pre>";

?>

y me da como resultado el siguiente error

1312: PROCEDURE ejemplo.leeemp can't return a result set in the given context


pero cuando lo ejecuto en consola directamente el store procedure

mysql> CALL leeemp();

me da como resultado correctamente los registros que tengo dentro de la tabla empleados.

y tengo un estore procedure de insercion en la misma tabla que hago la consulta, el cual usando el mismo codigo desde php si lo ejecuta correctamente.

si alguien me da una mano en esto lo agradeceria.
para la conexion a la base de datos uso la libreria addb
  #2 (permalink)  
Antiguo 30/03/2007, 12:26
Avatar de iskariote  
Fecha de Ingreso: marzo-2007
Mensajes: 39
Antigüedad: 17 años, 1 mes
Puntos: 1
Re: ejecutar store procedure en mysql desde php

Estimado:

haz intentado listar los campos necesarios con alias?

por ejemplo:

CREATE PROCEDURE leeemp()
BEGIN
select indice AS indice, nombre AS nombre, apellidos AS apellidos from empleados;
END

entonces en el script lo llamarias de esta forma:

Código PHP:
          <?php
             
include('adodb/adodb.inc.php');

             
$dbdriver='mysql';
             
$servidor='localhost';
             
$usuario='root';
             
$contraseña='';
             
$database='ejemplo';
             
$db ADONewConnection($dbdriver); 
             
$db->Connect($servidor$usuario$contraseña$database);
             
$rs $db->Execute('CALL leeemp()');
             print 
"<pre>";
             if (!
$rs->EOF)
                {
                echo 
" indice : ".$rs->fields("indice")." nombre : "$rs->fields("nombre")." apellidos : ".$rs->fields("apellidos")."<br />";
                } 
             print 
"</pre>";

?>
atte,

ISKARIOTE
  #3 (permalink)  
Antiguo 30/03/2007, 14:42
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 19 años, 8 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

gracias por tu sugerencia lo intente igual me da el mismo error

1312: PROCEDURE ejemplo.leeemp can't return a result set in the given context

adodb_mysql._execute(call example(), false) % line 891, file: adodb.inc.php
adodb_mysql.execute(call example()) % line 12, file: ejem.php
  #4 (permalink)  
Antiguo 27/09/2007, 16:35
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

Tengo el mismo problema que leo_25.

Estoy usando el appserv 2.5.6.

Alguien me podría dar una pista para resolver está dificultada.

Saludos
__________________
Leer es Saber, REEL.
Mi Blog
  #5 (permalink)  
Antiguo 28/09/2007, 16:19
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

Cambié a la versión 2.5.8 del appserv y persiste el error.

Me podrían ayudar con esto por favor.

Saludos
__________________
Leer es Saber, REEL.
Mi Blog
  #6 (permalink)  
Antiguo 09/11/2007, 08:01
Avatar de tricampeon27  
Fecha de Ingreso: enero-2007
Ubicación: Macul
Mensajes: 300
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: ejecutar store procedure en mysql desde php

tengo el mismo error
que leo_25

y utilizo otro tipo de conexion,

pero la idea es la misma

can't return a result set in the given context


pero sin envargo los sp que tengo de insert y update funcionan perfecto solo falla el select

alguen sabe por que???
__________________
*****Si Hasta En La Cana X Ti Estado*****
  #7 (permalink)  
Antiguo 09/11/2007, 08:04
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

tricampeon27

A que te refieres que estás usando otra conexión?
__________________
Leer es Saber, REEL.
Mi Blog
  #8 (permalink)  
Antiguo 09/11/2007, 08:08
Avatar de tricampeon27  
Fecha de Ingreso: enero-2007
Ubicación: Macul
Mensajes: 300
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: ejecutar store procedure en mysql desde php

mmmmmmmmmmmm,nada especial , solo que es la tipica conexion

$user = "127787";
$pass = "yessenia";
$db = "hipo";

$link = mysqli_connect("localhost",$user,$pass);
if (mysqli_connect_errno())
{
echo "connection error";
exit();
}
mysqli_select_db ($link,$db);
if ($result = mysqli_multi_query($link,"call sp_select_usuarios(10)"))
{

}
// mysql_free_result($rs);
// mysql_close($conn);
?>

tu sabes por que no funciona???
__________________
*****Si Hasta En La Cana X Ti Estado*****
  #9 (permalink)  
Antiguo 09/11/2007, 08:48
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

Pues no lo he solucionado. Tuve que volver hacerlo a la forma antigua, pero me he apoyado mucho con las vitas.

Pero después de leer tu post encontré funciones que no conocía. :)
__________________
Leer es Saber, REEL.
Mi Blog
  #10 (permalink)  
Antiguo 09/11/2007, 08:54
Avatar de tricampeon27  
Fecha de Ingreso: enero-2007
Ubicación: Macul
Mensajes: 300
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: ejecutar store procedure en mysql desde php

sabes ya logre hacer que funcionara te dejo el codigo haber si te sirve de algo

// mysqli way
$user = "127787";
$pass = "yessenia";
$db = "hipo";

$link = mysqli_connect("localhost",$user,$pass);
if (mysqli_connect_errno())
{
echo "connection error";
exit();
}
$conn = mysqli_select_db ($link,$db);
if (! $conn)
{
echo "error de bd";

}


//$result = mysqli_query( "CALL sp_select_usuarios(10)",$link);
$result = mysqli_query($link,'call sp_select_usuarios(10);');


if (! $result)
{
echo "error de procedure";
exit;
}
while ($aTmp = mysqli_fetch_array($result,MYSQLI_NUM))
{
// printf ("%s (%s)\n", $aTmp["usu_id"], $aTmp["usu_dv"]); con los nombre de campo no funcion si con las posiciones como la linea de abajo
printf ("%s (%s)\n", $roaTmpw[0], $aTmp[1]);

}
__________________
*****Si Hasta En La Cana X Ti Estado*****
  #11 (permalink)  
Antiguo 07/12/2007, 09:53
 
Fecha de Ingreso: agosto-2004
Ubicación: Lima
Mensajes: 109
Antigüedad: 19 años, 8 meses
Puntos: 1
Re: ejecutar store procedure en mysql desde php

la verdad es que para ejecutar un store procedure en mi caso usando ADODB solo es posible con php5.. y mysql 5.. aqui dejo script espero les sea util
FetchUtil.php
Código PHP:
<?php
class FetchUtil {
     
    var 
$row;
    var 
$DB_type;
    var 
$DB
    function 
FetchUtil($dsn){
        
$this->DB NewADOConnection($dsn);
        if ( !
$this->DB ) die("Conexion fallida - $dsn");
        
$this->DB->SetFetchMode(ADODB_FETCH_ASSOC);
    }
    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();
        } 
        return 
$temp
    }

    function 
FetchAllArray($query,$key,$value) {
        
$this->Execute($query);
        while(!
$this->row->EOF){
            
$temp[$this->row->fields[$key]] = $this->row->fields[$value];
            
$this->row->MoveNext();
        } 
        return 
$temp
    }
    function 
qstr($string) {
        return 
$this->DB->qstr($string,get_magic_quotes_gpc());
    }
}
?>

y el test es:
index_2.php

Código PHP:
<?php
require_once('adodb/adodb.inc.php'); 
require_once(
'FetchUtil.php');
$data_base 'mysql';
$user 'root';
$passwd '';
$host 'localhost';
$db_name 'ejemplo';
$dsn "$data_base://$user:$passwd@$host/$db_name?clientflags=65536";
$db = new FetchUtil($dsn);

$row $db->fetchAll("CALL select_emps()");/*llamada al store procedure*/
echo "<pre>";
print_r($row);
echo 
"</pre>";
?>
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.
Tema Cerrado




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