2012-09-28 21 views
6

Tengo la siguiente consulta:DOP comprobación de campo contra preparada: param, manejo es NULL condiciones

//query: 
$query = " 
    SELECT field1 FROM table 
    WHERE 
     field2 = :PARAM1 
    AND ... 
    AND fieldx = :PARAM1X"; 

//params: 
$params = array(); 
$params [":PARAM" . $i] = NULL; 

//prepare and execute: 
$o = $cnx->prepare($query); 
$o->execute($params); 

¿Cómo podría obligar a los parametros con NULL valores? ¿PDO cambiará automáticamente el = :PARAM1 al IS NULL? Para dejarlo en claro, intentar calcular WHERE field = null no funciona en mysql y nunca devolverá nada. Debemos usar WHERE field IS NULL en su lugar.

Eso es lo que estoy tratando ahora.

debo decir que mis primeras pruebas son positivas pero en realidad no quieren descubrir un efecto secundario de 6 meses en un entorno de producción ...

+0

¿Podemos ver el código que está utilizando para hacer el enlace? – ultranaut

+1

sí, aquí lo publiqué. También corregí el título porque me di cuenta de que no "vinculaba" explícitamente a los params, sino que los preparaba (discúlpame) – Sebas

+1

En mi opinión, fue un error cerrar esta pregunta como "no constructiva". Sin embargo, es un duplicado de esta pregunta: [¿Cómo enlazar un valor si quiero que acepte tanto INT como NULL con PDO?] (Http://stackoverflow.com/questions/7082405/). La respuesta aceptada es usar el [operador igual NULL-safe '<=>'] (http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#operator_equal-to). – TachyonVortex

Respuesta

1

Como comentario de PHP Docs dice,

bindValue(':PARAM1', null, PDO::PARAM_INT); 

o

$myNull = null; 
$stmt->bindParam(':PARAM1', $myNull, PDO::PARAM_NULL); 
+0

sí, pero ¿también se ocuparía de IS NULL en lugar de = NULL, que no funciona en una condición en una oración mysql sql? – Sebas

+0

@Sebas bien, creo que no puedes hacer eso. su pregunta es algo similar a esto y no se resolvió [haga clic aquí] (http://board.phpbuilder.com/showthread.php?10377549-mysql_real_escape_string-to-fix-apostrophes&goto=nextoldest), la mejor manera de hacerlo es crear una condición en PHP que construirá su condición 'WHERE'. (Por ejemplo, si 'param1' es nulo, añada esta condición, de lo contrario haga la otra condición ...) –

1

si desea enlazar params tendrán valores nulos entonces es necesario utilizar bindValues ​​

bindValue(':param', null, PDO::PARAM_INT); 

así que para su consulta puede ser algo como esto.

$sth = $dbh->prepare('SELECT field1 FROM table WHERE field2 = :PARAM1 AND fieldx = :PARAM1X'); 
$sth->bindValue(':PARAM1', null, PDO::PARAM_INT); 

Espero que esto ayude.

+0

sí, pero ¿también se ocuparía de IS NULL en lugar de = NULL, que no funciona en una condición en un sql mysql ¿frase? – Sebas

+0

no, no creo. PDO marcador de posición no fue para eso. si quiere poner alguna condición a su consulta, construya la consulta con la condición adecuada y luego pase el valor a través de bindParam o bindValue; –

+1

gracias por su respuesta – Sebas

Cuestiones relacionadas