2012-03-06 56 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()

相关问题