php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #74104 ibase_query and date as a param
Submitted: 2017-02-15 19:33 UTC Modified: -
From: mikedeweese at hotmail dot com Assigned:
Status: Open Package: InterBase related
PHP Version: 7.0.15 OS: CentOS 7
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: mikedeweese at hotmail dot com
New email:
PHP Version: OS:

 

 [2017-02-15 19:33 UTC] 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

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2019-03-23 18:34 UTC] lester at lsces dot co dot uk
Unable to recreate ...
%Y gives year as 4 characters, and %y trims it to 2 characters
 [2019-03-23 20:13 UTC] lester at lsces dot co dot uk
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 ?
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Thu Aug 06 12:01:24 2020 UTC