PHP執行MSSQL預儲程序時出現mssql_bind() [function.mssql-bind]: Unable to set parameter錯誤
出現問題的程式碼如下:
1 2 3 4 5 | <?php $sSQL = "select ..."; //超過 300 個字元的SQL指令 $proc = mssql_init('MyPagingRecordSet', $db_link); mssql_bind($proc, '@strSQL', $sSQL, SQLVARCHAR, false, false) or print_r(error_get_last()); ?> |
執行的預儲程序
1 2 3 4 5 6 7 | CREATE PROCEDURE MyPagingRecordSet @strSQL VARCHAR(1000), --查詢 sql,如 select * from [user] @PageIndex INT = 1, --查詢的頁號 @PageSize INT = 30 --每頁顯示紀錄數 AS --省略內容 GO |
不過當 $sSQL 變數內只有很短的 SQL 命令時, 程式是可以正常執行的, 所以改成指定參數長度如下:
1 | mssql_bind($proc, '@strSQL', $sSQL, SQLVARCHAR, false, false, 1000) or print_r(error_get_last()); |
執行結果還是一樣的錯誤訊息, 這應該是字串長度導致的問題, 再把程式改成
1 | mssql_bind($proc, '@strSQL', $sSQL, SQLTEXT, false, false) or print_r(error_get_last()); |
這樣就可以正常執行了, 而 Stored Procedure 的參數的資料型別也可以改成
1 2 3 4 5 6 7 | CREATE PROCEDURE MyPagingRecordSet @strSQL text, --查詢 sql,如 select * from [user] @PageIndex INT = 1, --查詢的頁號 @PageSize INT = 30 --每頁顯示紀錄數 AS --省略內容 GO |
是否要改, 就看執行上是否有其他問題了, 目前沒改也可以執行.