2013-07-29 20 views
2

我們有一個uni學生正在做工作經驗,他正在爲我們做一個Wordpress原型(因爲我們既沒有Wordpress也沒有PHP經驗)。無效的參數編號,SQL狀態S1093 php odbc mssql

它的運行在Windows服務器上,而WordPress的本身在MySQL正在運行,因爲我們所有的數據庫都在MS SQL服務器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頁面和CMS的Livelink頁面中都和正常工作,但是,當我們試圖從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

這是什麼特定存儲過程的名稱?或者它們都發生了嗎?並且不應該有'out'參數? – DevZer0

回答

0

正如我從錯誤信息中看到的,錯誤應該來自ODBC驅動程序,因爲從它的角度來看,參數編號與準備執行語句不同。

問問你的學生嘗試這種方法:

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

問題最終是由於其中一個odbcs(有一個32位和64位版本)指向主數據庫,我們一直在檢查錯誤的odbc – user1667784

0

我,當我在做從Java EE /休眠的原生SQL查詢同樣的錯誤。我在查詢「SELECT Count(1)From Table」,我犯了一個包含映射類作爲參數的錯誤。 COUNT(1)返回一個整數,所以它不需要映射。希望有所幫助。