Ola, somos Arume

Desenvolvemos páxinas web, aplicacións para móbiles, capas de realidade aumentada e aplicacións para Facebook. Apaixónanos a informática e somos uns perfeccionistas incurables; por eso nos nosos proxectos utilizamos estándares.

tel. 625 519 694

Mendaña de Neyra, 34, 3º B, 15008, A Coruña

Autenticarse

Rexistrarse. Esqueceches o teu contrasinal?

Etiquetas

Saltar as etiquetas

Subscríbete ás RSS

Estás en:

  • Inicio >
  • Blog >
  • mssql_bind converte as cadea baleiras en nulos

mssql_bind converte as cadea baleiras en nulos

17 Ago 2011 por Luis

Comentarios: 1

PHP + SQL Server

mssql_bind é unha función de PHP que serve para enviar parámetros a procedementos almacenados (stored procedures) en Microsoft SQL Server. Con ela podemos enviar ó procedemento almacenado todo tipo de variables: enteiros, reais, cadeas, ... e, se é necesario, nulos. Pero esta función ten un problema e, cando intentas pasarlle unha cadea baleira como parámetro ó procedemento almacenado, mssql_bind convérteo en nulo, o cal pode provocar erros se ese parámetro non acepta nulos.

mssql_bind ten seis posibles parámetros:

mssql_bind($stmt, $nome_param, $valor_param, $tipo, $e_saida, $e_nulo, $caracteres);
  1. $stmt: recurso devolto por mssql_init()
  2. $nome_param: nome do parámetro no procedemento almacenado
  3. $valor_param: valor do parámetro a enviar ó procedemento almacenado
  4. $tipo: tipo de dato do parámetro (SQLTEXT, SQLVARCHAR, SQLCHAR, SQLINT1, SQLINT2, SQLINT4, SQLBIT, SQLFLT4, SQLFLT8, SQLFLTN)
  5. $e_saida: se este parámetro será modificado e reenviado polo procedemento almacenado (por defecto: falso)
  6. $e_nulo: se enviar un valor nulo ó procedemento almacenado (por defecto: falso). Esta é a forma de enviar valores nulos. Pór null en $valor_param non funcionará.
  7. $caracteres: para valores de tipo SQLVARCHAR ou SQLCHAR, o tamaño do campo como está declarado no procedemento almacenado (por defecto: -1)

Unha vez visto isto, suponse que a única forma de enviar nulos ó procedemento almacenado sería pondo o parámetro $e_nulo a true, pero o erro do que estamos falando, fai que unha instrución como esta tamén envíe un nulo:

mssql_bind($stmt, '@param_1', '', SQLVARCHAR, false, false, 10);

Solución (parche, en realidade)

Para poder enviar cadeas baleiras ós procedementos almacenados con mssql_bind, podemos facer o seguinte:

mssql_bind($stmt, '@param_1', ' ', SQLVARCHAR, false, false, 0);

Atención ó valor do parámetro: non é cadea baleira senón un espazo.

A solución baséase en enviar ó procedemento almacenado un valor que non sexa cadea baleira (por exemplo, un espazo) para que a función non o converta en nulo, pero dicirlle que o tamaño do parámetro é cero, de forma que colla unha cadea de cero carácteres (ou cadea baleira).

Comentarios

1 comentarios. Comentar.

1. diegofc84 o 06 Nov 2011 ás 19:08:24

Excelente y rápida solución. Gracias.

Comentar

Comentar de forma anónima

Podes comentar poñendo calquera nome ou alcume, exceptuando os nomes de usuarios rexistrados. Máximo de 50 caracteres.

Comentar como usuario rexistrado

Rexistrarse. Esqueceches o teu contrasinal?