我尝试用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 );
有谁知道我的代码出了什么问题?
注意:当我手动运行存储过程时,这样可以正常运行并且没有错误显示
答案 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()
。