Foros del Web » Programando para Internet » PHP »

problemas con la sintaxis al ejecutar un Proced. almacenado

Estas en el tema de problemas con la sintaxis al ejecutar un Proced. almacenado en el foro de PHP en Foros del Web. Hola amigos, necesito que me ayuden a identificar el error que estoy cometiendo, Código PHP: <?php require( "db_mssql_EXT.php" ); $db  = new  DB_MSSQL_EXT ; $db -> ...
  #1 (permalink)  
Antiguo 17/04/2006, 09:25
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
problemas con la sintaxis al ejecutar un Proced. almacenado

Hola amigos, necesito que me ayuden a identificar el error que estoy cometiendo,
Código PHP:

<?php
require("db_mssql_EXT.php");
$db = new DB_MSSQL_EXT;
$db->connect();

$act_rut=$_GET["n_rut"];
$act_dig=$_GET["n_dig"];
$act_nomb=$_GET["n_nomb"];
$act_apellp=$_GET["n_apellp"];
$act_apellm=$_GET["n_apellm"];
$act_fech=$_GET["n_fech"];
$act_direc=$_GET["n_direc"];
$act_email=$_GET["n_email"];
$query="exec PR_graba_beneficiario " $act_rut .","$act_dig .","$act_nomb .","$act_apellp .","$act_apellm .","$act_fech .","$act_direc .","$act_email;


if (!
$db->query($query)){
echo 
'Lo siento no se pudo establecer la conexión<br>';
}else{
echo 
"<center><h2>Operación completada...</h2></center></body>";
}

?>
me aparece el sgte error:

Warning: mssql_query() [function.mssql-query]: message: Línea 1: sintaxis incorrecta cerca de '3'. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\sitios\db_mssql.inc on line 80

Warning: mssql_query() [function.mssql-query]: Query failed in C:\Archivos de programa\Apache Group\Apache2\htdocs\sitios\db_mssql.inc on line 80
Database error: Invalid SQL: exec PR_graba 1234566 3 nelson escobar villegas 223345 2 29 780100 3456789 72 44 sarmiento 456 [email protected]
MySQL Error: 1 (General Error (The MSSQL interface cannot return detailed error messages).)
Favor, Contactarse con [email protected] y repotar el error Session halted.
__________________
Cristian...

Última edición por nav2003; 17/04/2006 a las 10:00
  #2 (permalink)  
Antiguo 17/04/2006, 09:32
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Los parámetros de un procedimiento almacenado van separados por comas

exec procedimiento_almacanado param1, param2, param3, param4 ...
  #3 (permalink)  
Antiguo 17/04/2006, 10:16
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
con problemas...

Gracias Claudio , lo cambie , le puse comas, pero me da error..

voy a explicar lo que estoy haciendo, capturo datos de un usuario en particular con el rut, estos datos los muestro en un formulario y los recojo en el <input type=text name="valor" value="<?php echo$valorsacadodesdeBD; ?>">, y asi con todos y todo super bien, este formulario me permitira actualizar los datos del usuario, y estos datos pasan al codigo que envie anteriormente.

nota: en el campo fecha no capturo ningun valor, puesto queningun usuario tiene ingresado su fecha de nacimiento, bueno, eso no importaria si en este caso lo que se desea hacer , es actualizar los datos ,no es verdad, si ingreso en el form en el campo fecha : 02-12-2006 me envia el sgte error:

sigo con error de sintaxis...!!

el campo fecha: es de tipo datetime..se agrecede infinitamente tu ayuda..

Warning: mssql_query() [function.mssql-query]: message: Línea 1: sintaxis incorrecta cerca de '-'. (severity 15) in C:\Archivos de programa\Apache Group\Apache2\htdocs\sitios\db_mssql.inc on line 80

Warning: mssql_query() [function.mssql-query]: Query failed in C:\Archivos de programa\Apache Group\Apache2\htdocs\sitios\db_mssql.inc on line 80
Database error: Invalid SQL: exec PR_graba 1234566 3 nelson escobar villegas 223345 2 29 780100 3456789 72 44 sarmiento 456 [email protected]
MySQL Error: 1 (General Error (The MSSQL interface cannot return detailed error messages).)
Favor, Contactarse con [email protected] y repotar el error Session halted.
__________________
Cristian...
  #4 (permalink)  
Antiguo 17/04/2006, 11:05
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Lo que te decía, los parámetros del procedimiento almacenado se pasan separados por comas, los campos de texto y fecha se pasan entre comillas, es decir:

exec procedimiento_almacenado param_numerico, 'param_texto','param_fecha', ....
  #5 (permalink)  
Antiguo 17/04/2006, 12:12
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
problema con concatenacion

Claudio por lo que me dices

Código PHP:
$query="exec PR_graba_beneficiario " $act_rut .","$act_dig .","$act_nomb .","$act_apellp .","$act_apellm .","$act_fech .","$act_direc .","$act_email

entonces quedaría así:

$query="exec PR_graba_beneficiario " $act_rut $act_dig ," $act_nomb "," $act_apellp "," $act_apellm "," $act_fech "," $act_direc "," $act_email " 

es la primera vez que programo con procedimientos almacenados y sqlserver y estoy mariado con la concatenacion...o soy muy bruto..
__________________
Cristian...
  #6 (permalink)  
Antiguo 17/04/2006, 12:31
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Prueba asi:

$query="exec PR_graba_beneficiario $act_rut, $act_dig, '$act_nomb', '$act_apellp', '$act_apellm', '$act_fech', '$act_direc', '$act_email' " ;

Aqui estoy suponiendo que $act_rut y $act_dig son campos numericos en la bd.
  #7 (permalink)  
Antiguo 18/04/2006, 09:37
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
actualizacion realizada pero con mensaje de error...

Claudio dado lo que me sugeristes y lo que averigué por mi parte, el código resultante que permitió realizar el proceso de actualización es el sgte:

Código PHP:
$db = new DB_MSSQL_EXT;
$db->connect();

//tomo los datos pasados por get...

$sql="exec PR_graba_beneficiario " $act_rut .",'".$act_dig ."','"$act_nomb ."','"$act_apellp ."','"$act_apellm ."','"$act_fech ."',"$act_sexocodig .","$act_gradocodig .","$act_unidadcodig .",'"$act_fono ."',"$act_comuna  .","$act_ciudad .",'"$act_direc ."','"$act_email "'" ;
$db->query($sql);
$db->next_record();
$v_rut $db->f('saca_rut');
$v_dig $db->f('saca_dig');

/*vuelvo a formulario concatenando el rut y el dig que son los datos que solicito para ingresar al formulario*/
echo "<HEAD><meta http-equiv=\"Refresh\" content=\"0;   url=res2.php?env_rut=$v_rut&env_dig=$v_dig\"></HEAD><body><br><p><br><p><center><h2>Se ha realizado la operación con éxito...</h2></center></body>"
este es el mensaje de error:

Database error: Invalid SQL: exec PR_graba_beneficiario 11112222,'4','carlos,'ojeda','morales','1-1-1900 0:00',2,29,323000,'82482428',72,44,las hualtatas 234,'[email protected]'
MySQL Error: 1 (General Error (The MSSQL interface cannot return detailed error messages).)
Favor, Contactarse con [email protected] y repotar el error Session halted.

creo que acá está el error $db->query($sql);

como seria la mejor manera de solucionar esto??..
__________________
Cristian...
  #8 (permalink)  
Antiguo 18/04/2006, 09:49
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Aun tienes texto sin comillas: las hualtatas 234.
Revisa bien que tipo de dato tienen tus campos para sepas como pasar los parametros según lo que te indiqué.
  #9 (permalink)  
Antiguo 18/04/2006, 09:55
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
vale master

ok master, voy a verlo enseguida..
__________________
Cristian...
  #10 (permalink)  
Antiguo 18/04/2006, 10:11
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
Este es el procedimiento almacenado: con los parametros y sus tipos de datos

CREATE PROCEDURE dbo.PR_graba_beneficiario
@rut int ,
@dig char(1) ,
@nombre varchar(20),
@apellido1 varchar(20) ,
@apellido2 varchar(20) ,
@nac_fecha datetime ,
@codigo_sexo int ,
@codigo_grado int ,
@codigo_unidad int ,
@telefono varchar(10) ,
@codigo_comuna int ,
@codigo_ciudad int ,
@direccion varchar(50) ,
@email char(30)
AS

IF EXISTS ( SELECT 1 FROM dbo.w_beneficiario WHERE rut = @rut )
BEGIN

UPDATE dbo.w_beneficiario
SET nombre = @nombre,
apellido1 = @apellido1,
apellido2 = @apellido2,
nac_fecha = @nac_fecha,
codigo_sexo = @codigo_sexo,
codigo_grado = @codigo_grado,
codigo_unidad = @codigo_unidad,
telefono = @telefono,
codigo_comuna = @codigo_comuna,
codigo_ciudad = @codigo_ciudad,
direccion = @direccion,
email = @email
WHERE rut = @rut

END

GO

arregle lo de las comillas en direccion y el error es el mismo.
__________________
Cristian...
  #11 (permalink)  
Antiguo 18/04/2006, 11:48
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
No se si el usuario que se conecta via php tenga los permisos para ejecutar el procedure habría que revisar eso.
Otra cosa que puedes hacer es esto:

Haz un echo $sql; para mostrar como queda el sql y luego toma esa impresión y copiala en el Analizador de Consultas tal cual, ahi te dirá exactamente que error ocurre, dado que php no implementa la gestion de errores en la funciones para sql server.
  #12 (permalink)  
Antiguo 18/04/2006, 16:10
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
ok amigo ..gracias.
__________________
Cristian...
  #13 (permalink)  
Antiguo 25/04/2006, 12:05
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
error con sintaxis

hola claudio, hace poco retome el tema que tenia pendiente;

el error es el mismo, lo probe en el analizado sql, y la sintaxis está correcta, no muestra error de sintaxis. pero me sigue desplegando error en pantalla.
Código PHP:
$sql "exec PR_graba_beneficiario " $act_rut .",'"$act_dig ."','"$act_nomb ."','"$act_apellp ."','"$act_apellm ."','"$act_fech ."',"$act_sexocodig .","$act_gradocodig .","$act_unidadcodig .",'"$act_fono ."',"$act_comuna  .","$act_ciudad .",'"$act_direc ."','"$act_email "'" ;

//$db->query($sql);
$result=$db->query($sql); 

puede ser un problema de como devolver los datos? no se ..es super urgente
necesito ayuda..

gracias.-

Database error: Invalid SQL: exec PR_graba_beneficiario 12345678,'3','Mauricio','MOYA','CASTRO','2-2-2005 ',2,29,323000,'345678',72,44,'ARTURO GORDON 45','[email protected]'
MsSQL Error: 1 (General Error (The MSSQL interface cannot return detailed error messages).)
Favor, Contactarse con [email protected] y repotar el error Session halted.
__________________
Cristian...
  #14 (permalink)  
Antiguo 25/04/2006, 15:29
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Me pasó eso alguna vez y era tema de permisos. Crea el inicio de sesión en sql server indicándole que usará autentificación de sql server y dale permisos para ejecutar el procedimiento.
  #15 (permalink)  
Antiguo 26/04/2006, 19:45
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago
Mensajes: 301
Antigüedad: 14 años, 10 meses
Puntos: 1
funciona en otro pc

Cita:
Iniciado por claudiovega
Me pasó eso alguna vez y era tema de permisos. Crea el inicio de sesión en sql server indicándole que usará autentificación de sql server y dale permisos para ejecutar el procedimiento.
hola claudio , mira mi codigo funciona en otro pc hace la actualización, y NO MUESTRA ERROR, será un tema del apache , te lo digo por que un amigo instalo el apache siguiendo otro manual , mientras que yo use el de maestrosdelweb.
atando cabos, deberia tener un archivo mssql.php dentro de mi ruta?

estoy recomplicado con esto...
__________________
Cristian...
  #16 (permalink)  
Antiguo 27/04/2006, 09:09
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
No necesitas ningun archivo adicional pues ya tienes funcionando la extension de php para conectarse y usar mssql. Sino fuera así, tendrías otro tipo de errores, el típico es este: Call to undefined function mssql_connect()...., lo cual indica que php no está trabajando con la extension para sql server.

Te reitero que revises como está creado el inicio de sesion en sql server (en el servidor sql server), es decir, ve al servidor y revisa las propiedades de dicho inicio de sesion (inicio de sesion= login del usuario).
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.