3

我们现在有一个大学生在做工作经验,他正在为我们做一个 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”,它会返回数据,但我们不能调用存储过程(当然,我们用它来做所有事情!)。

知道他哪里可能出错了吗?

4

2 回答 2

0

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

让您的学生尝试这种方法:

$parms=array("var1", "var2", "var3"); 
if (!odbc_execute($request, &$parms)) die("odbc_execute failed");
于 2013-07-29T08:04:53.160 回答
0

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

于 2015-02-13T19:56:56.427 回答