0

I have a very simple INSERT statement that I can run using SSMS. When I run the same INSERT statement using PHP mssql_execute or mssql_query SQL profiler shows me that the 'TextData' is identical when sent in by PHP as it is when sent in by SSMS. The problem is when executed via the PHP code, the INSERT never actually happens, whereas when run from within SSMS, it inserts just fine. Any ideas?

MS SQL: 2008 R2

PHP: 5.4, freetds 8.0

PHP error:

PHP Warning:  mssql_execute(): message: Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services. (severity 16) in /home/...

Edit: PHP relevant PHP added

<?php
putenv('FREETDS=/home/###/freetds.conf');
putenv('FREETDSCONF=/home/###/freetds.conf');

$link = mssql_connect('mssqlserver', '###','###'); // connect

if ( !$link ) {
    if ( function_exists('error_get_last') ) {
        var_dump(error_get_last());
    }
    die('connection failed');
}

// Create a new statement
$stmt = mssql_init('Db.dbo.SprocName');

// Some values
$a = 1;
$b = 'test';
$c = 'myname';

// Bind values
mssql_bind($stmt,'@a',$a,SQLINT2,false,false);
mssql_bind($stmt,'@b',$b,SQLVARCHAR,false,false,8000);
mssql_bind($stmt,'@c',$c,SQLVARCHAR,false,false,50);

// Execute the statement
mssql_execute($stmt);

// And we can free it like so:
mssql_free_statement($stmt);

?>
downatone
  • 1,936
  • 2
  • 23
  • 30

1 Answers1

0

The stored procedure (Db.dbo.SprocName) did a simple insert on a table, lets call it (Db.dbo.TableName). When I removed the foreign key from Db.dbo.TableName then the PHP mssql INSERT calls started working.

I realize this technically resolves the issue, but in practice its not acceptable. Those FK's are there for a reason :). Any thoughts?

downatone
  • 1,936
  • 2
  • 23
  • 30