conexion clase php postgresql null pdo sqlbindparameter

clase - php pdo reference



PHP PDO inserta NULL en lugar de potsgresql vacĂ­o (2)

Además de la respuesta más apropiada de xdazz, a menudo puedes resolver algo como esto en SQL: simplemente reformula la consulta INSERT INTO ... VALUES (?) algo como INSERT INTO ... VALUES (NULLIF(?, '''')) .

Estoy usando PHP PDO con un backend Postgresql. Tengo una tabla que tiene algunos campos que aceptan valores NULL y cuando el usuario ingresa nada en el campo de formulario HTML, quiero insertar NULL en ese campo, no una cadena vacía (esto es importante ya que algunos de mis SELECT en estas tablas luego usan condiciones como como DONDE x NO ES NULO).

Sin embargo, esta versión del código bindParam inserta una cadena vacía en el campo anulable en lugar de NULL.

$stmt2->bindParam('':title'', $title, PDO::PARAM_STR);

He estado leyendo bastante y descubrí que esta es la respuesta para insertar null en el campo:

$stmt2->bindParam('':title'', $title, PDO::PARAM_NULL);

pero esto significa que necesito verificar previamente todos los parámetros que se pasan a los campos anulables para determinar si están vacíos y, de ser así, pasar el PDO :: PARAM_NULL en lugar de PDO_PARAM_STR. Por supuesto, puedo hacer esto, pero esperaba que haya una configuración que simplemente diga a PDO si encuentra una cadena vacía, inserte nulo en su lugar.

Me encontré con esto

$this->dbh->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING);

pero no tiene ningún efecto y con investigaciones adicionales, estoy pensando que esto solo afecta el registro en el camino de salida, no en el camino de entrada.

¿Alguna otra opción que no sea verificar previamente las variables?

gracias Aaron


Si quieres nulo, simplemente inserta null lugar de cadena vacía.

$stmt2->bindParam('':title'', $title === '''' ? null : $title, PDO::PARAM_STR);