title: Passing date as input parameter to mssql stored procedure through PHP
body: <p>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.</p>
  
  <pre><code>//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); 
  </code></pre>
  
  <p>When I run as above with the field set as 'SQLDATETIME' I get a php warning</p>
  
  <pre><code>    Warning: mssql_bind() expects parameter 4 to be long, string given
  </code></pre>
  
  <p>IF I run it with the field set as 'SQLVARCHAR' I get no error but no update in the database occurs</p>
  
  <p>I have pasted in the stored procedure that is run below:</p>
  
  <pre><code>    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 &lt;&gt; 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
  </code></pre>
  
  <p>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.</p>
  
  <pre><code>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
  </code></pre>