出現問題的程式碼如下:
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 |
是否要改, 就看執行上是否有其他問題了, 目前沒改也可以執行.