mssql_bind
es una función de PHP que sirve para enviar parámetros a procedimientos almacenados (stored procedures) en Microsoft SQL Server. Con ella podemos enviar al procedimiento almacenado todo tipo de variables: enteros, reales, cadenas, … y, si es necesario, nulos. Pero esta función tiene un problema y, cuando intentas pasarle una cadena vacía como parámetro al procedimiento almacenado, mssql_bind
lo convierte en nulo, lo cual puede provocar errores si ese parámetro no acepta nulos.
mssql_bind
tiene seis posibles parámetros:
mssql_bind($stmt, $nombre_param, $valor_param, $tipo, $es_salida, $es_nulo, $caracteres);
$stmt
: recurso devuelto pormssql_init()
$nombre_param
: nombre del parámetro en el procedimiento almacenado$valor_param
: valor del parámetro a enviar al procedimiento almacenado$tipo
: tipo de dato del parámetro (SQLTEXT, SQLVARCHAR, SQLCHAR, SQLINT1, SQLINT2, SQLINT4, SQLBIT, SQLFLT4, SQLFLT8, SQLFLTN
)$es_salida
: si este parámetro será modificado y reenviado por el procedimiento almacenado (por defecto: falso)$es_nulo
: si enviar un valor nulo al procedimiento almacenado (por defecto: falso). Esta es la forma de enviar valores nulos. Ponernull
en$valor_param
no funcionará.$caracteres
: para valores de tipoSQLVARCHAR
oSQLCHAR
, el tamaño del campo como está declarado en el procedimiento almacenado (por defecto: -1)
Una vez visto esto, se supone que la única forma de enviar nulos al procedimiento almacenado sería poniendo el parámetro $es_nulo
a true
, pero el error del que estamos hablando, hace que una instrucción como esta también envíe un nulo:
mssql_bind($stmt, '@param_1', '', SQLVARCHAR, false, false, 10);
SOLUCIÓN (PARCHE, EN REALIDAD
Para poder enviar cadenas vacías a los procedimientos almacenados con mssql_bind
, podemos hacer lo siguiente:
mssql_bind($stmt, '@param_1', ' ', SQLVARCHAR, false, false, 0);
Atención al valor del parámetro: no es cadena vacía sino un espacio.
La solución se basa en enviar al procedimiento almacenado un valor que no sea cadena vacía (por ejemplo, un espacio) para que la función no lo convierta en nulo, pero decirle que el tamaño del parámetro es cero, de forma que coja una cadena de cero caracteres (o cadena vacía).
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.