Problema con procedimiento almacenado en SQL SERVER

Imagen de omegajack

Forums: 

Hola chavos de antemanom gracias por tomarse el tiempo de leer este tema. Acudo a ustedes por que realmente estoy desesperado, dado que estoy trabajando sobre un servidor linux pero debo insertar datos en una BD sobre SQL SERVER en una maquina windows.

Se me otorgaron varios procedimientos, entre los que estan el de insertar, desconozco mucho de SQL SERVER precisamente por eso quisiera me ayudaran , el procedimiento devuelve 1 o 0 dependiendo de si ejecuto la inserccion o no. EL procedimiento es el sieguiente:

PAI_INSERTAMENSAJE (
@pin SMALLINT, @idseccion AS SMALLINT, @p1 AS SMALLINT, @p2 AS SMALLINT, @p3 AS SMALLINT, AS SMALLINT, @p5 AS SMALLINT, @p6 AS SMALLINT, @p7 AS SMALLINT, @p8 AS SMALLINT=NULL, @p9 AS SMALLINT=NULL, @p10 AS SMALLINT=NULL, @estado_sp as TINYINT OUTPUT)

hice una funcion que utiliza este procedimiento:

function insertar_voto($pin,$id_seccion,$p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9,$p10)
{
$salida="";
$link=mssql_connect("148.226.26.100","drdwelecciones","E13Kpmpr");
$stmt=mssql_init('PAI_INSERTAMENSAJE',$link);
mssql_select_db("ELECCIONES09",$link);
mssql_bind($stmt,'@pin',$pin,SQLINT2);
mssql_bind($stmt,'@idseccion',$id_seccion,SQLINT2);
mssql_bind($stmt,'@p1',$p1,SQLINT2);
mssql_bind($stmt,'@p2',$p2,SQLINT2);
mssql_bind($stmt,'@p3',$p3,SQLINT2);
mssql_bind($stmt,'@p4',$p4,SQLINT2);
mssql_bind($stmt,'@p5',$p5,SQLINT2);
mssql_bind($stmt,'@p6',$p6,SQLINT2);
mssql_bind($stmt,'@p7',$p7,SQLINT2);
mssql_bind($stmt,'@p8',$p8,SQLINT2);
mssql_bind($stmt,'@p9',$p9,SQLINT2);
mssql_bind($stmt,'@p10',$p10,SQLINT2);
mssql_bind($stmt,'RETVAL',&$salida,SQLINT1);
mssql_execute($stmt);
mssql_free_statement($stmt);
return $salida;
}

Lo llamo de la siguiente manera:

$resultado=insertar_voto($pin,$idseccion,$v1,$v2,$v3,$v4,$v5,$v6,$v7,$v8,$v9,$v10);

Arrojando el siguiente resultado(use un eco para ver la linea anterior)
Warning: mssql_execute(): stored procedure execution failed in /etc/scripts_sms/sms on line 34
--insertar_voto(1234,7,12,2,34,25,62,58,42,12,12,34) y devuelve 0

Segun yo deberias funcionar, porfavor si alguien puede orientarme se lo agradecere infinitamente

cambia el engine

Imagen de chopeta

Cambiate a un db engine que sea open-source jejejejeje (bromita).

Mirando el codigo asumo que estas tratando de integrarte con una plataforma proprietaria de SMS. Talvez tu proveedor te permita hacer la integracion usando algun API (XML-RPC, SOAP, etc.) inves de acceso directo a la base de datos (si estoy asumiendo correctamente, por supuesto).

La otra es que te cambie de lenguaje, porque usar PHP para escribir en MS-SQL ? Con VB-Script lo puedes hacer y hay millon tutoriales en internet... con PHP no creo que vayas conseguir mucha ayuda (seguro que solo de leer SQL SERVER en tu post un monton de tios por aqui habran pensado en insultarte) :)

Suerte en todo caso.

PLS,
chopeta

"Toda la unanimidad es tonta." -Nelson Rodrigues

Jejeje lo se

Imagen de omegajack

Jajaja lo de insultarme lo se perfectamente, yo mismo lo haria, pero no es cuestion de mi decision, en mi empresa me pidieron un realizar un proyecto para encuestas usando sms, es decir, yo recibo los mensajes usando un cel normal, esto con Gammu(sobre mi servidor ke ovbiamente es un linux, debian para ser mas especificos), hice un script para monitorear la carpeta de inbox ke defini para el gammu, el problema es que la BD no me la dejaron a mi, se la dejaron a otro departamento que es Windows 100%(si deberian escupirlos lo se) pero el caso no es ese, sino que a fuerza debo conectarme a la BD e insertar los registros de los mensajes ke llegan, el problema mayor es que la unica conexion que tengo con ese servidor es la BD por lo que no he podido monitorear al 100 por que no funciona.

Saludos

Crea un trigger

Imagen de WarezFox

crea un trigger es un procedimiento almacenado que se ejecuta cada vez que realizas una accion en este caso al hacer el insert tu le dices dentro de la base de datos que realice tal o cual acccion
a nivel de base de datos y no del cliente, esto hace que sea mas rapido la ejecuccion de tus aplicaciones

Resuelto

Imagen de omegajack

Hola a todos, lo he solucionado, de antemano gracias por sus comentarios. Lo que he hecho es llamar al procedimiento no como a un procedimiento, es decir, lo llamo usando un mssql_query... de la siguiente manera

mssql_query(1234,12,1,2,3,4,5,6,7,1)

Como se daran cuenta le estoy pasando al final el valor de estado_sp a diferencia de que llamara al procedimiento tal cual, ese parametro no deberia de ir.

Espero esto ayude si es que es la forma correcta de solucionarlo. Saludos