Php , sql server y los valores NULL

A ver, voy a intentar explicarlo lo más claro posible y en principio no voy a pegar código porque de momento no lo veo necesario.
- Trabajo sobre una base de datos Sql Server (2012, aunque migrada de 2005 y actuaban igual). No puedo modificar parámetro alguno en dicha base de datos, debo trabajar tal cual está.
* Los campos sobre los que hago las consultas están habilitados para que sean NULOS en su defecto (es decir, no se rellenen).
He estado trabajando hasta hace poco con una versión de php 5.0, accediendo mediante el módulo mssql de php. Y con apache 2.2 pero no tiene que ver en esto.
Realizaba consultas sobre estas tablas del tipo "select * from tabla where campo=".$variable_php
Bien, la variable de php $variable_php, podía contener un valor (numérico, pero no es lo que importa) o bien podía estar vacío, es decir NULL. Yo le asignaba el valor NULL para que lo pudiera comparar con el valor de la tabla, que podía ser numérico o ser NULL (en su dia se registro sin valor en ese campo).
Bien pues con mi php 5.0 podía hacer consultas, donde se diera el ejemplo de "select * from tabla where campo=NULL" y se evaluaba correctamente.
Tras actualizar a php 7, usando los controladores de microsoft para sql server "sqlsrv" y apache 2.4, resulta que me es imposible hacer esas comparaciones en las consultas, ya que no retorna valor, lo omite como si "campo=NULL" no diera coincidencias.
No puedo utilizar la funcion IS_NULL, porque en la consulta que hago (donde hago comparaciones del mismo tipo con más campos en el mismo select) los campos pueden ser numéricos o pueden estar vacíos, entonces yo desde php primero los filtro por si no son numéricos, los convierto en NULL para que desde sql server compare el valor NULL que yo les he dado con el valor NULL de la tabla si este campo estuviera vacío.
Por tanto, con la nueva versión de php (sqlsrv) no puedo hacer selects del tipo campo=NULL, y no sé como cojones salir de esta, sabiendo que no puedo tocar la tabla.
Siento el tocho, aportaré toda la info que me pidáis para facilitar esto. Ojala esté metiendo la gamba y sea fácil de resolver.

1

1 Respuesta

154.065 pts. O eres parte de la solucion, o eres parte del problema.

Lo que tienes que hacer es hacer una consulta o otra depende del valor de ese campo, por ejemplo:

$consulta = "SELECT * FROM tabla WHERE campo = 'valor'";

if( $campo2 == null ){

    $cosulta .= " AND campo2 IS NULL";

} else{

    $cosulta .= ' AND campo2 = "{$campo2}"';

}

Es decir, en php construyes la consulta con las necesidades que tengas, y luego la mandas.

La pregunta no admite más respuestas

Más respuestas relacionadas