警告:mssql_execute():提供的参数不是有效的MS SQL语句资源

时间:2012-03-06 03:55:26

标签: php

我尝试用php运行一个存储过程。但不知何故,这总是在屏幕上显示以下错误消息:

“警告: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 );

有谁知道我的代码出了什么问题?

注意:当我手动运行存储过程时,这样可以正常运行并且没有错误显示

2 个答案:

答案 0 :(得分:0)

mssql_execute()执行预准备语句,而不是包含SQL语句的字符串(这是mssql_query()的函数。您需要准备一个语句,将参数绑定到其中,然后执行它:< / p>

// 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()来执行存储过程,但是当可以使用预准备语句时,不建议这样做。

答案 1 :(得分:0)

我相信您应该使用sqlsrv函数而不是mssql,但在此处提出问题之前,您应该参考php documentation,因为它可能会帮助您到达根目录你的问题。 mssql_execute()需要资源,而不是字符串查询。您需要创建一个存储过程来调用mssql_init(),或者在您的情况下,您可以使用mssql_query()