I am trying to run an mssql stored procedure which passes in some user entered data. I run the stored procedure directly and it works fine but when I try to run it using the attached code I get no error and nothing updates. I think it is something to do with the date being passed in. The date field in the database is defined as 'datetime'. It might be something else but other stored procedures run the same way on this system are working fine.
//initiate function
$proc = mssql_init('usp_Update_Certificate_Customer_Details', $msdb);
//define parameters
$telId = $_POST['telId'];
$certNumber = $_POST['certNumber'];
$custTel = $_POST['main_tel'];
$instRef = $_POST['install_ref'];
//$commDate = $_POST['comm_date'];
$standards = $_POST['standards'];
$commDate = date('Y-m-d h:i:s');
echo 'telid: '.$telId.' certNumber: '.$certNumber.' custTel: '.$custTel.' instRef: '.$instRef.' commDate: '.$commDate.' standards: '.$standards;
mssql_bind($proc, '@Telephone_ID', $telId, SQLINT4, false, false, 10);
mssql_bind($proc, '@Certificate_Number', $certNumber, SQLINT4, false, false, 10);
mssql_bind($proc, '@Customer_Telephone', $custTel, SQLVARCHAR, false, false, 10);
mssql_bind($proc, '@Installers_Reference', $instRef, SQLVARCHAR, false, false, 10);
mssql_bind($proc, '@Commisioned_Date', $commDate, SQLDATETIME, false, false, 10);
mssql_bind($proc, '@Installed_to_Standards', $standards, SQLVARCHAR, false, false, 10);
//Execute Procedure
$result = mssql_execute($proc);
//Free Memory
mssql_free_statement($proc);
When I run as above with the field set as 'SQLDATETIME' I get a php warning
Warning: mssql_bind() expects parameter 4 to be long, string given
IF I run it with the field set as 'SQLVARCHAR' I get no error but no update in the database occurs
I have pasted in the stored procedure that is run below:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Phil Yeomn
-- Create date: 19-04-2008
-- Description: Update Customer Details
-- =============================================
ALTER PROCEDURE [dbo].[usp_Update_Certificate_Customer_Details](
@Telephone_ID INT,
@Certificate_Number Int,
@Customer_Telephone Varchar(50),
@Installers_Reference Varchar(50),
@Commisioned_Date Datetime,
@Installed_To_Standards Varchar(50)
)
AS
BEGIN
SET NOCOUNT ON;
IF @Telephone_ID <> 0 AND @Customer_Telephone IS NULL
BEGIN
DELETE FROM ssaib.dbo.Telephone_T
WHERE Telephone_ID = @Telephone_ID
SET @Telephone_ID = NULL
END
IF @Telephone_ID = 0 AND @Customer_Telephone IS NOT NULL
BEGIN
INSERT INTO ssaib.dbo.Telephone_T (Telephone_Number_VC, Last_Update_DT)
VALUES (@Customer_Telephone, GETDATE())
SET @Telephone_ID = SCOPE_IDENTITY()
END
IF @Telephone_ID = 0
BEGIN
SET @Telephone_ID = NULL
END
UPDATE ssaib.dbo.Certificate_Returns_T
SET Customer_Telephone_ID = @Telephone_ID,
Installers_Reference_VC = @Installers_Reference,
Commisioned_Date_DT = @Commisioned_Date,
Installed_To_Standards_VC = @Installed_To_Standards
WHERE (Certificate_Return_ID = @Certificate_Number)
END
I have pasted the full error in below, the first line is the values that are getting passed into the stored procedure just displayed as a string to check they are all there.
telid: 61529 certNumber: 1262789 custTel: 01423 734002 instRef: /3548 commDate: 2012-05-05 00:00:00 standards: PD 6662 and DD 243
Warning: mssql_bind() expects parameter 4 to be long, string given in /home/ssaibuk/public_html/common/modules/supplier/certificates-direct.php on line 111
Warning: mssql_execute() [function.mssql-execute]: message: Procedure or function 'usp_Update_Certificate_Customer_Details' expects parameter '@Commisioned_Date', which was not supplied. (severity 16) in /home/ssaibuk/public_html/common/modules/supplier/certificates-direct.php on line 116
Warning: mssql_execute() [function.mssql-execute]: General SQL Server error: Check messages from the SQL Server (severity 16) in /home/ssaibuk/public_html/common/modules/supplier/certificates-direct.php on line 116
Warning: mssql_execute() [function.mssql-execute]: stored procedure execution failed in /home/ssaibuk/public_html/common/modules/supplier/certificates-direct.php on line 116