0

我有一个非常简单的 INSERT 语句,可以使用 SSMS 运行。当我使用 PHP mssql_execute 或 mssql_query 运行相同的 INSERT 语句时,SQL 分析器显示,当由 PHP 发送时,'TextData' 与由 SSMS 发送时相同。问题是当通过 PHP 代码执行时,INSERT 从未真正发生,而当从 SSMS 中运行时,它插入就好了。有任何想法吗?

微软 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);

?>
4

1 回答 1

0

存储过程 (Db.dbo.SprocName) 对表进行了简单的插入,我们称之为 (Db.dbo.TableName)。当我从 Db.dbo.TableName 中删除外键时,PHP mssql INSERT 调用开始工作。

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

于 2013-09-23T18:29:54.593 回答