PHP / MSSQL / SQL Profiler:不执行传入SQL

时间:2013-09-23 16:01:43

标签: php sql-server sql-server-2008 freetds

我有一个非常简单的INSERT语句,我可以使用SSMS运行。当我使用PHP mssql_execute或mssql_query运行相同的INSERT语句时,SQL事件探查器向我显示,当由PHP发送时,'TextData'与SSMS发送时相同。问题是当通过PHP代码执行时,INSERT实际上从未发生,而当从SSMS内部运行时,它插入就好了。有什么想法吗?

MS SQL:2008 R2

PHP:5.4,freetds 8.0

PHP错误:

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/...

编辑:添加了PHP相关的PHP

<?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);

?>

1 个答案:

答案 0 :(得分:0)

存储过程(Db.dbo.SprocName)在表上执行了一个简单的插入,让我们调用它(Db.dbo.TableName)。当我从Db.dbo.TableName中删除外键时,PHP mssql INSERT调用开始工作。

我意识到这在技术上解决了这个问题,但在实践中它是不可接受的。那些FK是有原因的:)。有什么想法吗?