ID: 40452
Comment by: rolfpinto at hotmail dot com
Reported By: aspen dot olmsted at alliance dot biz
Status: Assigned
Bug Type: PDO related
Operating System: Windows 2003, XP
PHP Version: 5.2.1
Assigned To: wez
New Comment:
this is code is in php:
<?php
...
$date = '12/01/2007';
mssql_bind($srtproc, "@somedate", $date, SQLVARCHAR, FALSE, FALSE);
...
?>
this is code in your store procedure under ms sql server
ALTER PROCEDURE [dbo].[sp_agregaranimal]
@somedate DATETIME,
AS
BEGIN
SELECT CONVERT(datetime, @somedate, 102)
END
Previous Comments:
------------------------------------------------------------------------
[2008-02-29 22:20:24] ethan dot nelson at ltd dot org
This bug may be due to failure of SQL Server to perform implicit
conversion between character and datetime data types when the
characterlength is not explicitly part of variable declaration. I
posted my workaround under PDO_ODBC section.
------------------------------------------------------------------------
[2008-02-29 20:11:56] ethan dot nelson at ltd dot org
This code illustrates the fact that SQL can work with a variety of date
formats when moving to a SQL2005 type of datetime.
To use this script, remove the sql comments '--' and comment out the
appropriate params line to test PDO attempts to work with the different
formats. All of them throw exceptions.
<?php
include("../include/config.inc");
$db = new bkg_db();
$query = "SELECT 'sqltest1' = CAST('20080101 12:07:32' AS datetime)
,'sqltest2' = CAST('2008-01-01 12:07:32' AS datetime)
,'sqltest3' = CAST('01/01/2008 12:07:32' AS datetime)
,'sqltest4' = CAST('01-01-2008 12:07:32' AS datetime)
--,'pdotest' = CAST(:pdotest AS varchar)
";
$params = array(':pdotest' => '20080101 12:07:32');
$params = array(':pdotest' => '2008-01-01 12:07:32');
$params = array(':pdotest' => '01/01/2008 12:07:32');
$params = array(':pdotest' => '01-01-2008 12:07:32');
$params = array();
$db->execute_query($query,$params);
print_r($db->get_results());
?>
------------------------------------------------------------------------
[2007-11-23 11:04:34] rob at tdd dot org dot uk
I was experiencing the same problem with a stored procedure (SQL
SERVER), however I found that I was calling the parameters in a
different order in which they where expected, even though I was
specifying the parameter name.
-- replcate
CREATE PROC hello
@world VARCHAR(100),
@repeat INT
AS
SELECT 'hello ' + REPLICATE(@world, @repeat)
GO
-- both give same output
EXEC hello @world = 'world', @repeat = 5
EXEC hello @repeat = 5, @world = 'world'
If I was to call the first exec equivalent in php using bound
parameters then it works, however the php equivalent using bound
parameters it fails with a function sequence error.
------------------------------------------------------------------------
[2007-10-11 14:22:29] jfdsmit at gmail dot com
I have a similar experience, running PHP 5.2.4 on Windows 2003. The
server /does/ accept values when they are formatted exactly yyyy-mm-dd
(as per the date() format Y-m-d) /or/ if the supplied value == NULL.
Empty strings and dates formatted otherwise (2007-3-12 for instance)
result in a HY010 SQLSTATE Sequence error. So contrary to what daniel
dot tams at gmail dot com says, the bug is formatting-dependant in my
experience
------------------------------------------------------------------------
[2007-04-24 19:05:14] daniel dot tams at gmail dot com
Just wanted to clarify that the error is unrelated to the format of the
datetime.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/40452
--
Edit this bug report at http://bugs.php.net/?id=40452&edit=1