ID:               44196
 User updated by:  tyler at sleekcode dot net
 Reported By:      tyler at sleekcode dot net
 Status:           Bogus
 Bug Type:         PostgreSQL related
 Operating System: Windows
 PHP Version:      5.2.5
 New Comment:

>From documentation for PostgreSQL 8.3 (going all the way back to the 7x
branch)

transform_null_equals (boolean)
When on, expressions of the form expr = NULL (or NULL = expr) are
treated as expr IS NULL, that is, they return true if expr evaluates to
the null value, and false otherwise. The correct SQL-spec-compliant
behavior of expr = NULL is to always return null (unknown). Therefore
this parameter defaults to off. 

However, filtered forms in Microsoft Access generate queries that
appear to use expr = NULL to test for null values, so if you use that
interface to access the database you might want to turn this option on.
Since expressions of the form expr = NULL always return the null value
(using the correct interpretation) they are not very useful and do not
appear often in normal applications, so this option does little harm in
practice. But new users are frequently confused about the semantics of
expressions involving null values, so this option is not on by default.


Note that this option only affects the exact form = NULL, not other
comparison operators or other expressions that are computationally
equivalent to some expression involving the equals operator (such as
IN). Thus, this option is not a general fix for bad programming.


Previous Comments:
------------------------------------------------------------------------

[2008-02-21 13:18:21] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

Doing foo = NULL does not work in databases. To fetch based on NULL 
values of a column you need to do column IS NULL

------------------------------------------------------------------------

[2008-02-20 23:25:19] tyler at sleekcode dot net

Description:
------------
Passing NULL via pg_query_params does not work resulting in situations
where a possible NULL value must have a secondary branch of code to
adjust the query accordingly.

Reproduce code:
---------------
using postgres 8x create this test table:

CREATE TABLE test
(
  id     serial PRIMARY KEY,
  name   text,
  extra  text,
);
INSERT INTO test (name,extra) VALUES ('Testing 123,'Testing');
INSERT INTO test (name) VALUES ('My extra is null');

<?php
$db = pg_connect("your connection string");

// set postgresql to allow = NULL instead of requiring IS NULL
pg_query("set transform_null_equals to on");

// query for all records where extra = NULL (postgres converts to extra
IS NULL)
$res = pg_query_params("SELECT name FROM test WHERE
extra=$1",array(NULL));

// print result, should be 'My extra is null'
print pg_fetch_result($res,0);
?>

Expected result:
----------------
The code should return the first result that matches the query.

Actual result:
--------------
The query does not run correctly.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44196&edit=1

Reply via email to