¿Cómo escribir un procedimiento almacenado usando phpmyadmin y cómo usarlo a través de php?


Quiero poder crear procedimientos almacenados usando phpMyAdmin y luego usarlo a través de php.

, Pero no sé cómo?

Por lo que sé, descubrí que no podemos administrar procedimientos almacenados a través de phpMyAdmin.

¿Qué otra herramienta puede administrar el procedimiento almacenado?

Ni siquiera estoy seguro de si es mejor opción usar el procedimiento almacenado a través de PHP. Alguna sugerencia?

Author: Starx, 2010-05-17

10 answers

Dado que un procedimiento almacenado se crea, se altera y se suelta mediante consultas, en realidad PUEDE administrarlos utilizando phpMyAdmin.

Para crear un procedimiento almacenado, puede usar lo siguiente (cambiar según sea necesario):

CREATE PROCEDURE sp_test()
BEGIN
  SELECT 'Number of records: ', count(*) from test;
END//

Y asegúrese de establecer el campo "Delimitador" en la pestaña SQL a //.

Una vez que haya creado el procedimiento almacenado, aparecerá en el conjunto de campos de Rutinas debajo de sus tablas (en la pestaña Estructura), y puede cambiarlo/soltarlo fácilmente.

Para utilizar el almacenado procedimiento desde PHP tienes que ejecutar una consulta de LLAMADA, al igual que lo harías en SQL simple.

 92
Author: wimvds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-17 09:15:53

Supongo que nadie mencionó esto, así que lo escribiré aquí. En phpMyAdmin 4.x, hay un enlace "Agregar rutina" en la pestaña "Rutinas" en la fila superior. Este enlace abre un cuadro de diálogo emergente donde puede escribir su procedimiento almacenado sin preocuparse por el delimitador o la plantilla.

introduzca la descripción de la imagen aquí

Añadir rutina

introduzca la descripción de la imagen aquí

Tenga en cuenta que para el procedimiento almacenado de prueba simple, es posible que desee eliminar el parámetro predeterminado que ya se ha dado o simplemente puede configurarlo con un valor.

 55
Author: Hammad Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-31 20:40:43

Prueba esto

delimiter ;;

drop procedure if exists test2;;

create procedure test2()

begin

select ‘Hello World’;

end

;;
 25
Author: Sourav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-29 08:50:41

Intenta Toad para MySQL - es gratis y es genial.

 1
Author: ronaldosantana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-17 03:51:00

Conseguí que funcionara en phpAdmin , pero solo cuando eliminé la frase "Número de registros".

En mi versión de phpAdmin pude ver el cuadro para cambiar los delimitadores.

También para ver el procedimiento en la base de datos fui a la página principal de phpAdmin, luego a la base de datos information_schema y luego a la tabla de rutinas.

 1
Author: Reto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-11 18:43:56

La nueva versión de phpMyAdmin (3.5.1) tiene mucho mejor soporte para procedimientos almacenados; incluyendo: edición, ejecución, exportación, creación de código PHP, y algo de depuración.

Asegúrese de que está utilizando la extensión mysqli en config.inc.php

$cfg['Servers'][$i]['extension'] = 'mysqli';

Abra cualquier base de datos, verá una nueva pestaña en la parte superior llamada Rutinas, luego seleccione Agregar rutina.

La primera prueba que hice produjo el siguiente mensaje de error:

MySQL dijo: #1558-Columna conde de mysql.proc está mal. Esperado 20, encontrado 16. Creado con MySQL 50141, ahora ejecutando 50163. Utilice mysql_upgrade para corregir este error.

El Blog de Ciuly proporciona una buena solución, suponiendo que tenga acceso a la línea de comandos. No estoy seguro de cómo lo arreglarías si no lo haces.

 1
Author: Paul J,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-27 07:29:43
  1. delimitador ;;
  2. CREAR PROCEDIMIENTO sp_number_example_records ()
  3. BEGIN
    SELECCIONE count (id) del cliente; END
  4. ;;
 1
Author: Jay Thakkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-27 06:59:13

Todas las respuestas anteriores están haciendo ciertas suposiciones. Hay problemas básicos en 1and1 y algunos otros proveedores de alojamiento están utilizando versiones de phpMyAdmin que son muy antiguas y tienen un problema que delimitador definido es ; y no hay manera de cambiarlo de phpMyAdmin. Los siguientes son los caminos

  1. Cree un nuevo phpMyAdmin en el proveedor de alojamiento. El enlace adjunto te da una idea http://internetbandaid.com/2009/04/05/install-phpmyadmin-on-1and1 /
  2. Ir a través de la ruta complicada de poder acceder a sus proveedores de hosting MySQL desde su dekstop. Es complicado pero lo mejor si eres un desarrollador serio. aquí hay un enlace para hacerlo http://franklinstrube.com/blog/remote-mysql-administration-for-1and1/

Espero que esto ayude

 0
Author: Sandeep Taneja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-28 16:34:17

En el servidor local su siguiente consulta funcionará

DELIMITER |

CREATE PROCEDURE sample_sp_with_params (IN empId INT UNSIGNED, OUT oldName VARCHAR(20), INOUT newName VARCHAR(20))

BEGIN

SELECT `first name` into oldName FROM emp where id = empId;

UPDATE emp SET `first name`= newName where id = empId;

END

|

DELIMITER ;

Pero en el servidor de producción podría no funcionar. depende de la versión de mysql que estés usando. Tuve el mismo problema en el servidor powweb, eliminé delimiter y begin keywords, funciona bien. echa un vistazo a la siguiente consulta

CREATE PROCEDURE adminsections( IN adminId INT UNSIGNED ) SELECT tbl_adminusersection.ads_name, tbl_adminusersection.ads_controller FROM tbl_adminusersectionright LEFT JOIN tbl_adminusersection ON ( tbl_adminusersectionright.adsr_ads_id = tbl_adminusersection.ads_id ) LEFT JOIN tbl_adminusers ON ( tbl_adminusersectionright.adsr_adusr_id = tbl_adminusers.admusr_id ) WHERE tbl_adminusers.admusr_id = adminId;

Espero que te ayude.

Gracias

 0
Author: Delickate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-09 08:22:16
/*what is wrong with the following?*/
DELIMITER $$

CREATE PROCEDURE GetStatusDescr(
    in  pStatus char(1), 
    out pStatusDescr  char(10))
BEGIN 
    IF (pStatus == 'Y THEN
 SET pStatusDescr = 'Active';
    ELSEIF (pStatus == 'N') THEN
        SET pStatusDescr = 'In-Active';
    ELSE
        SET pStatusDescr = 'Unknown';
    END IF;

END$$
 0
Author: Ajnabi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-02 16:49:32