Bug #74104 [Com]: ibase_query and date as a param

From: Date: Sat, 23 Mar 2019 20:13:10 +0000
Subject: Bug #74104 [Com]: ibase_query and date as a param
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-220155@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=74104&edit=1 ID: 74104 Comment by: lester at lsces dot co dot uk Reported by: mikedeweese at hotmail dot com Summary: ibase_query and date as a param Status: Open Type: Bug Package: InterBase related Operating System: CentOS 7 PHP Version: 7.0.15 Block user comment: N Private report: N New Comment: I have been unable to recreate this on 7.0.31 or 7.2.16 ... The two options for dateformat year are %Y for a 4 digit year, and %y for a two digit year and this is working fine as either first or last segment. Our problem with dates here is that Firebird expects M/D/Y so everything has to be coded Y-M-D to avoid the day month problem. But in all cases FYEAR is returned as 4 digits. strptime is available on the test machines ... but noting the comment on the manual entry, this probably needs upgrading to date_parse_from_format ? Previous Comments: ------------------------------------------------------------------------ [2019-03-23 18:34:49] lester at lsces dot co dot uk Unable to recreate ... %Y gives year as 4 characters, and %y trims it to 2 characters ------------------------------------------------------------------------ [2017-02-15 19:33:07] mikedeweese at hotmail dot com Description: ------------ The interbase.so extension parses dates that have two digit years wrong. In php.ini, ibase.dateformat = "%m/%d/%Y" I am able to get correct results by editing function ibase_query.c, function _php_ibase_bind, forcing "#ifdef HAVE_STRPTIME" to fail, which causes firebird sql to to parse the string. This does not fail on my Windows boxes. Test script: --------------- CREATE TABLE Z_DEBUG ( FID INTEGER, FDATE DATE ); CREATE OR ALTER TRIGGER Z_DEBUG_BI0 FOR Z_DEBUG ACTIVE BEFORE INSERT POSITION 0 AS BEGIN NEW.FID = NEXT VALUE FOR GEN_MYGEN; END <?php ibase_connect('localhost:TEST', 'sysdba', 'masterkey'); $q = ibase_query("INSERT INTO Z_DEBUG (FDATE) VALUES(?) RETURNING (FID)", '3/6/17'); $r = ibase_fetch_object($q); $q2 = ibase_query("SELECT FDATE, extract(year from FDATE) as FYEAR FROM Z_DEBUG WHERE FID = ?", $r->FID); $r2 = ibase_fetch_object($q2); print $r2->FDATE . ' ' . $r2->FYEAR . "\n\n"; Expected result: ---------------- 03/06/2017 2017 Actual result: -------------- 03/06/17 17 That is the year 0017, 17 years after 1 BC ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=74104&edit=1

« previous php.bugs (#220155) next »