2012-03-06 30 views
0

我嘗試使用php運行其中一個存儲過程。警告:mssql_execute():提供的參數不是有效的MS SQL語句資源

:但不知何故,這是在屏幕上始終顯示以下錯誤消息「警告:mssql_execute():提供的參數不是一個有效的MS的SQL語句的資源......」

請在下面找到我的代碼用於調用存儲過程在PHP中:

$conn = mssql_connect("sql-02", "rsGreen", "abc123"); 
$db = mssql_select_db("Green"); 

$Query = "exec rpt_control @list = '".$_REQUEST['list']."', 
        @suburb = '".$_REQUEST['suburb']."', 
        @state = '".$_REQUEST['state']."', 
        @on_off = ".$_REQUEST['switch']; 

mssql_execute($Query); 

不要任何人知道我的代碼是怎麼回事?

注:當我手動運行存儲過程,這是工作的罰款,沒有錯誤顯示

回答

0

mssql_execute()執行一份聲明中,不包含SQL語句(這是mssql_query()功能的字符串你。需要準備的聲明中,參數綁定到它,執行它:

// Prepare it with mssql_init() 
$qry = mssql_init("rpt_control", $conn); 
if ($qry) { 

    // We assume these fields are all VARCHAR types... 
    // If not, see the type constants listed on the mssql_bind() docs... 
    mssql_bind($qry, '@list', $_REQUEST['list'], SQLVARCHAR); 
    mssql_bind($qry, '@suburb', $_REQUEST['suburb'], SQLVARCHAR); 
    mssql_bind($qry, '@state', $_REQUEST['state'], SQLVARCHAR); 
    mssql_bind($qry, '@switch', $_REQUEST['switch'], SQLVARCHAR); 

    // Then execute it 
    mssql_execute($qry); 

    // And free it 
    mssql_free_statement($qry); 
} 

儘管可以通過構建一個SQL字符串並將其發送到mssql_query()來執行存儲過程,但在使用預準備語句時不建議這樣做。

+0

我試過這個..但是錯誤信息「Warning:mssql_execute()[function.mssql-execute]:message:異類查詢需要爲連接設置ANSI_NULLS和ANSI_WARNINGS選項,以確保一致的查詢語義。選項,然後重新發出你的查詢「dispay – 2012-03-06 04:04:28

+1

@JinYong所以打開它們'mssql_query(」SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;「);' – 2012-03-06 04:07:54

0

我相信你應該使用sqlsrv函數,而不是mssql,但在你問一個問題之前你應該參考php documentation,因爲它可能可以幫助你找到問題的根源。 mssql_execute()需要資源,而不是字符串查詢。您可能需要創建一個存儲過程來調用mssql_init(),或者在您的情況下,您可能可以使用mssql_query()

相關問題