我们现在有一名大学生正在做工作,他正在为我们做一个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”,它会返回数据,但是我们无法调用存储过程(我们当然会将其用于所有内容!)。
知道他哪里出错了?
答案 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)返回一个整数,因此不需要映射。希望有所帮助。