参数号无效,SQL状态S1093 php odbc mssql

时间:2013-07-29 07:39:28

标签: php sql-server-2008 odbc

我们现在有一名大学生正在做工作,他正在为我们做一个Wordpress原型(因为我们没有Wordpress或PHP经验)。

它在Windows服务器上运行,而Wordpress本身在mySQL中运行,因为我们现有的所有数据库都在MS SQL Server 2005/2008中,并且他正在尝试使用以下代码在php页面中调用存储过程:

$connection = odbc_connect('DB', 'UNAME', 'PWORD');

$request = odbc_prepare($connection, "CALL ProcName(?, ?, ?)");
if(!$request) die("Could not prepare statement:" . odbc_errormsg());


$result = odbc_execute($request, array("var1", "var2", "var3"));
if(!$result) die("Could not execute statement:" . odbc_errormsg());

存储过程如下:

ROCEDURE [dbo].[ProcName]
(@option1 varchar(50),
@option2  varchar(50),
@option3  varchar(50))
AS
... lots of logic end with...
select * from tblName

存储过程由.net页面和Livelink CMS页面使用,并且正常工作但是当我们尝试从php调用它时,它出错了:

"odbc_execute(): SQL error: [Microsoft][ODBC SQL Server Driver]Invalid parameter number, SQL state S1093 in SQLDescribeParameter in C:\inetpub\wordpress\test.php on line 29"

奇怪的是,如果我们将过程调用重命名为一个不存在的存储过程,那么它的错误与完全相同的东西而不是存储过程都找不到错误类型。

我们可以直接运行sql,即“select * from etc”,它会返回数据,但是我们无法调用存储过程(我们当然会将其用于所有内容!)。

知道他哪里出错了?

2 个答案:

答案 0 :(得分:0)

正如我从错误消息中看到的那样,错误应该来自ODBC驱动程序,因为从它的角度来看,参数编号与准备执行语句不同。

让学生尝试这种方法:

$parms=array("var1", "var2", "var3"); 
if (!odbc_execute($request, &$parms)) die("odbc_execute failed");

答案 1 :(得分:0)

当我从Java EE / Hibernate执行本机SQL查询时,我遇到了同样的错误。我正在查询" SELECT Count(1)From Table"而我错误地将映射类作为参数包含在内。 COUNT(1)返回一个整数,因此不需要映射。希望有所帮助。