Foros del Web » Programando para Internet » PHP »

error al insertar registro en mssql server

Estas en el tema de error al insertar registro en mssql server en el foro de PHP en Foros del Web. buenas noches, este es el error (que no se interpretar): Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 ...
  #1 (permalink)  
Antiguo 14/08/2014, 14:03
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
error al insertar registro en mssql server

buenas noches,

este es el error (que no se interpretar):
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => An invalid parameter was passed to sqlsrv_query. [message] => An invalid parameter was passed to sqlsrv_query. ) )

Código PHP:
Ver original
  1. <?php
  2.  
  3.     function abrirCONPHP()
  4.     {
  5.         $serverName = "sql.dominio.com"; //serverName\instanceName
  6.         $connectionInfo = array( "Database"=>"nombredb", "UID"=>"usuariodb", "PWD"=>"contraseñadb");
  7.         $conn = sqlsrv_connect( $serverName, $connectionInfo);
  8.  
  9.         //if( $conn )
  10.         //{
  11.         //  echo "Conexión establecida.<br />";
  12.         //}
  13.         //else
  14.         //{
  15.         //  echo "Conexión no se pudo establecer.<br />";
  16.         //  die( print_r( sqlsrv_errors(), true));
  17.         //}    
  18.     }
  19.    
  20.     function closeCONNPHP()
  21.     {
  22.         sqlsrv_close( $conn );
  23.     }  
  24.  
  25.  
  26.     abrirCONPHP();
  27.     $sql = 'INSERT INTO nombretabla (archivo,fecha,codigo) values ("nombreimagen.jpg","20140814 11:00:00","111111")';
  28.     $ins = sqlsrv_query( $conn, $sql);
  29.        
  30.     if( $ins === false )
  31.     {
  32.         die( print_r( sqlsrv_errors(), true));
  33.     }
  34.     closeCONNPHP();
  35.  
  36. ?>
  #2 (permalink)  
Antiguo 18/08/2014, 11:43
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

sigo con mi particular calvario php,

por un lado, comentar que había un problema con las comillas, dobles para delimitar la cadena y simples para especificar los valores en la sentencia.
y por otro, no se que pasa con las funciones, por que sin utilizarlas hace el insert

Código PHP:
Ver original
  1. <?php
  2.  
  3.         $serverName = "sql.nombredominio.com";
  4.         $connectionInfo = array( "Database"=>"nombredb", "UID"=>"usuariodb", "PWD"=>"contradb");
  5.         $conn = sqlsrv_connect( $serverName, $connectionInfo);
  6.  
  7.  
  8.     $sql = "INSERT INTO correoa (archivo,fecha,codigo) values ('nombrearchivo.jpg','20140814 11:00:00','111111')";
  9.     $ins = sqlsrv_query( $conn, $sql);
  10.        
  11.  
  12.         sqlsrv_close( $conn );
  13. ?>

una ayudita a este todavía no aprendiz de php.

un saludo.
  #3 (permalink)  
Antiguo 18/08/2014, 13:05
Avatar de alejo_ferguson  
Fecha de Ingreso: mayo-2014
Mensajes: 33
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: error al insertar registro en mssql server

Me confundi un poco. Al final inserta o no?

Aprovecho para sugerir que los valores a insertar, podrias ponerlos en variables y luego poner las variables en el query insert (al final hace lo mismo)

$variable1 = "valor_a_insertar";

$query = mysql_query("insert into tabla(colum1, column2, column3)values( ' $variable1 ' , ' $variable2 ', ' $variable3 ')");
  #4 (permalink)  
Antiguo 18/08/2014, 13:45
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

lo hace cuando no utilizo las funciones para establecer y cerrar la conexión, y cuando he utilizado las comillas dobles para definir la cadena de la instrucción insert, y las comillas simples para definir los valores a insertar.

lo de utilizar variables lo hago en el script real, este es un resumen.

vamos que el problema está en ¿cómo utilizar correctamente las funciones de conexión y cierre?

un saludo,
josé carlos.
  #5 (permalink)  
Antiguo 18/08/2014, 13:53
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

utilizando tu sugerencia

Código PHP:
Ver original
  1. $sql = "INSERT INTO correoa (archivo,fecha,codigo) values (' $fileName ' , ' $fecha ' , ' $_POST["codigo"] ')";
  2. $ins = sqlsrv_query( $conn, $sql);

devuelve este error:
Código error:
Ver original
  1. PHP Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in

un saludo.
  #6 (permalink)  
Antiguo 18/08/2014, 14:14
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

alejo, con tu sugerencia también funciona.
el problema está en el uso de las funciones para establecer y cerrar la conexión.

un saludo,
josé carlos.
  #7 (permalink)  
Antiguo 20/08/2014, 11:10
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

alguien puede ayudarme con esta cuestión?
no logro hacer que funcione el script cuando utilizo las funciones, ni incluidas en la misma página php, ni mediante includes con las funciones.

un saludo.
  #8 (permalink)  
Antiguo 20/08/2014, 11:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: error al insertar registro en mssql server

Código PHP:
Ver original
  1. $sql = "INSERT INTO correoa (archivo, fecha, codigo)
  2. values (' $fileName ' , ' $fecha ' , ' $_POST["codigo"] ')";
  3. $ins = sqlsrv_query( $conn, $sql);
Tienes un fallo de construcción de la query, por mal uso de las comillas.
Como el índice del array $_POST se pone entre comillas, se está cortando la generación de la cadena de la query, queinicias con el mismo signo.
Tienes dos soluciones simples:
1) Usa una variable intermedia (es más limpio):
Código PHP:
Ver original
  1. $codigo = $_POST["codigo"];
  2. $sql = "INSERT INTO correoa (archivo,fecha,codigo)
  3. values (' $fileName ' , ' $fecha ' , '$codigo')";
  4. $ins = sqlsrv_query( $conn, $sql);
2) Encadenala correctamente:
Código PHP:
Ver original
  1. $sql = "INSERT INTO correoa (archivo,fecha,codigo)
  2. values (' $fileName ' , ' $fecha ' , '". $_POST["codigo"]."')";
  3. $ins = sqlsrv_query( $conn, $sql);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 20/08/2014, 11:35
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

Con este código:
Código PHP:
Ver original
  1. <?php
  2.  
  3.     function abrirCONPHP()
  4.     {
  5.         $serverName = "sql.presupueston.com"; //serverName\instanceName
  6.         $connectionInfo = array( "Database"=>"presupueston", "UID"=>"dbpreonvu1001", "PWD"=>"9409preon1001");
  7.         $conn = sqlsrv_connect( $serverName, $connectionInfo);
  8.  
  9.         if( $conn )
  10.         {
  11.             echo "Conexión establecida.<br />";
  12.         }
  13.         else
  14.         {
  15.             echo "Conexión no se pudo establecer.<br />";
  16.             die( print_r( sqlsrv_errors(), true));
  17.         }      
  18.     }
  19.    
  20.     function closeCONNPHP()
  21.     {
  22.         sqlsrv_close( $conn );
  23.     }      
  24.    
  25.     abrirCONPHP();
  26.  
  27.     $fileName = 'bano-minimalista-sanitarios-pared.jpg';
  28.     $fecha      = date("Ymd H:i:s");
  29.     $codigo   = '111111';
  30.     $sql = "INSERT INTO correoa (archivo,fecha,codigo) values (' $fileName ' , ' $fecha ' , ' $codigo ')";
  31.    
  32.     $ins = sqlsrv_query( $conn, $sql);
  33.        
  34.     if( $ins === false )
  35.     {
  36.         die( print_r( sqlsrv_errors(), true));
  37.     }
  38.  
  39.     closeCONNPHP();
  40.  
  41. ?>

Este error:
Código ERROR:
Ver original
  1. Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => An invalid parameter was passed to sqlsrv_query. [message] => An invalid parameter was passed to sqlsrv_query. ) )

Cuando dejo de utilizar las funciones el script funciona, ayuda por favor.

un saludo.
  #10 (permalink)  
Antiguo 20/08/2014, 12:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: error al insertar registro en mssql server

Cita:
An invalid parameter was passed to sqlsrv_query.
Hay un parámetro incorrecto en la función invocada. Así de simple.

¿Solución?



Bueno, usualmente todos nosotros vamos al manual de referencia para ver qué escribimos mal.... ¿Lo probaste?

Mira, si la línea que dispara el error es esta:
Código PHP:
Ver original
  1. $ins = sqlsrv_query( $conn, $sql);

Hay dos posibilidades: O no está abierta la conexión, o la query está mal formada.
Si la conexión ya la comprobaste, sólo restaría pensar que la query tiene algún problema, y para solucionarlo lo primero es ver cómo quedó armada. Algo que puedes hacer simplemente con un echo:

Código SQL:
Ver original
  1. $sql = "INSERT INTO correoa (archivo,fecha,codigo) values (' $fileName ' , ' $fecha ' , ' $codigo ')";
  2. // ver la query antes de enviarla.
  3. echo $sql;
  4.  
  5. $ins = sqlsrv_query( $conn, $sql);
Este paso es importante porque puede darse que los datos sean correctos, pero el formato de los mismos no lo sea, o bien que generen errores al ejecutarse, por incompatibilidad de tipos de dato.
Para saberlo con certeza lo mejor es capturar el error de salida de la llamada:
Código SQL:
Ver original
  1. $sql = "INSERT INTO correoa (archivo,fecha,codigo) values (' $fileName ' , ' $fecha ' , ' $codigo ')";
  2. // ver la query antes de enviarla.
  3. echo $sql;
  4.  
  5. $ins = sqlsrv_query( $conn, $sql);
  6. IF( $ins === FALSE ) {
  7.     IF( ($errors = sqlsrv_errors() ) != NULL) {
  8.         foreach( $errors AS $error ) {
  9.             echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
  10.             echo "code: ".$error[ 'code']."<br />";
  11.             echo "message: ".$error[ 'message']."<br />";
  12.         }
  13.     }
  14. }

Por otro lado, yo pensaría si esos espacios en blanco que rodean los datos no están trayendo problemas... Especialmente en la fecha.

Código SQL:
Ver original
  1. $sql = "INSERT INTO correoa (archivo,fecha,codigo)
  2. values ('$fileName ' , ' $fecha' , ' $codigo')";
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/08/2014, 13:50
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

Conexión establecida.
INSERT INTO correoa (archivo,fecha,codigo) values ('bano-minimalista-sanitarios-pared.jpg','20140820 21:50:59','111111')

SQLSTATE: IMSSP
code: -14
message: An invalid parameter was passed to sqlsrv_query.
  #12 (permalink)  
Antiguo 20/08/2014, 14:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: error al insertar registro en mssql server

Esa respuesta en ese contexto tiene todo el aspecto de ser un error de tipo o longitud de datos con la tabla.
¿Podrías darnos el CREATE TABLE de la tabla "CORREOA".

Y, por las dudas, ¿qué versión de PHP está usando el host?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 20/08/2014, 14:14
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: error al insertar registro en mssql server

CREATE TABLE [dbo].[correoa](
[clave] [int] IDENTITY(1,1) NOT NULL,
[correo] [nvarchar](50) NULL,
[archivo] [nvarchar](120) NOT NULL,
[fecha] [datetime] NOT NULL,
[codigo] [nvarchar](20) NOT NULL
) ON [PRIMARY]

PHP Version 5.4.5

(cuando no utilizo las funciones, el script funciona)

un saludo.
  #14 (permalink)  
Antiguo 20/08/2014, 17:54
 
Fecha de Ingreso: mayo-2014
Ubicación: Zapopan, Jalisco
Mensajes: 11
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: error al insertar registro en mssql server

mmm la variable de conexion se puede ver en la función de cierre? no debería estar definida fuera de la funcion que hace la conexion?
  #15 (permalink)  
Antiguo 20/08/2014, 18:01
 
Fecha de Ingreso: mayo-2014
Ubicación: Zapopan, Jalisco
Mensajes: 11
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: error al insertar registro en mssql server

insisto a lo mejor es una tonteria lo que digo pero a ver, la variable $conn que se ocupa para ejecutar el query esta dentro de la función de conexion entonces no puedes verla desde afuera, no será por eso que con las funciones de conexion no te funciona el script?

de hecho el error dice textual (An invalid parameter was passed to sqlsrv_query)

define las variables primero fuera de la funcion de conexion y luego asignales el valor dentro de la función

y tienes que retornar la variable de conexion en la función para que puedas utilizarla cuando ejecutes el query

Última edición por antonioMontanez; 20/08/2014 a las 18:41

Etiquetas: fecha, mssql, registro, server, sql, tabla
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 11:50.