Hola estoy intentando crear un procedimiento almacenado desde php a mysql, que estoy haciendo mal?
<html>
<head>
</head>
<body>
<?php
mysql_connect("localhost", "root", "sr388");
$b=mysql_query("
create procedure pedir(in strCodBicicleta varchar(255), in strCodPeticion varchar(255), in strCodUsuario varchar(255))
begin
update bicicleta set estado='usando' where cod_bicicleta=strCodBicicleta;
insert into peticion(cod_peticion, usuario, fecha, hora)values(strCodPeticion, strCodUsuario, current_date, current_time);
end
");
if($b){
echo "funka";
}else{
echo "T_T";
}
?>
</body>
</html>
Dejo las tablas bicicleta, peticion y usuario:
create table usuario(
username varchar(255) not null primary key,
permisos varchar(4) not null, -- 'ADM' o 'USER'
password varchar(255) not null,
e_mail varchar(255) not null
)engine=innodb;
create table bicicleta(
cod_bicicleta varchar(255) not null primary key,
estado varchar(6) not null -- 'usando' o 'libre'
)engine=innodb;
create table peticion(
cod_peticion int unsigned not null primary key,
usuario varchar(255) not null references usuario(username),
fecha date not null,
hora time not null
)engine=innodb;
De antemano, gracias
PD: en la shell funka con el uso de delimiter
Esa función no está hecha para eso.
Si pinchas en el mismo código que has puesto te lleva aquí
http://uk.php.net/mysql_query
¿Ves que ponga algo de procedimientos? ¿no?, pues sí, lo pone ^^
Tienes que crear el procedimiento desde la shell y luego invocarlo, en la misma página hay un ejemplo.
<?php
//...
$rs = mysql_query('CALL sproc2(500)');
while (($row=mysql_fetch_assoc($rs))!==false) {
print_r($row);
}
mysql_free_result($rs);
$rs = mysql_query('CALL sproc2(500)');
print mysql_error(); //the notorious 'command out of synch' message :(
while (($row=mysql_fetch_assoc($rs))!==false) {
print_r($row);
}
mysql_free_result($rs);
?>
El problema que tengo es que quiero pasarle este sp a mis compañeros con los que estoy haciendo este trabajo, el procedimiento almacenado en la shell me funka así:
delimiter '$$'
create procedure pedir(in strCodBicicleta varchar(255), in strCodPeticion varchar(255), in strCodUsuario varchar(255))
begin
update bicicleta set estado='usando' where cod_bicicleta=strCodBicicleta;
insert into peticion(cod_peticion, usuario, fecha, hora)values(strCodPeticion, strCodUsuario, current_date, current_time);
end
$$
DELIMITER ';'
Pero mis compañeros no usan la shell, es mas, ni siquiera tienen el query browser, usan la gui de phpmyadmin, y por cierto, este code intenté meterlo en el querybrowser de mi instituto y no me funka, reformulo la pregunta, como puedo pasarle este sp a mis compañeros?, había pensado hacer un archivo.php que lo ejecuten y se les cree solo :P, pero veo que no se puede
Desde ya, agradeciendo sus respuestas
Saludos!
Hay muchas funciones para eso, escoge la que más te guste, te dejo dos sugerencias:
http://php.net/manual/en/function.shell-exec.php
http://php.net/manual/en/function.system.php