从 php 执行时 SQL Server 存储过程错误

Posted

技术标签:

【中文标题】从 php 执行时 SQL Server 存储过程错误【英文标题】:SQL Server stored procedure error while executing from php 【发布时间】:2010-10-15 18:12:35 【问题描述】:

我正在尝试从 php 执行存储过程。

在 php 代码中 iam 向存储过程发送一个整数参数

$orderId =824;
$result =mssql_bind($sp, "@orderID", $orderId, SQLINT1, true, false);

我收到一个错误

mssql_execute() [function.mssql-execute]:消息:形式参数“@orderID”未声明为 OUTPUT 参数,但实际参数在请求的输出中传递。 (16 级)

谁能说出原因

【问题讨论】:

【参考方案1】:

document of mssql_bind 的签名为:

bool mssql_bind  ( resource $stmt  , string $param_name  , mixed &$var  , int $type  [, bool $is_output = false  [, bool $is_null = false  [, int $maxlen = -1  ]]] )

所以您的问题是您将 $is_output 设置为 true。

使用

$orderId =824;
$result =mssql_bind($sp, "@orderID", $orderId, SQLINT1, false, false);

【讨论】:

我怀疑是这样,正如 Linto 所说的“向存储过程发送一个整数参数” 我一切正常,但有一个问题。当我发送小 oderid(例如 1,225,100,596,..)时,它可以工作,但是当我发送大订单 ID 例如(100303)时,它没有给出输出,尽管有是这个订单的记录。所以我用 all most all 更改了 mssql_bind 的类型参数,然后我会得到警告“警告:mssql_execute() [function.mssql-execute]: WARNING! Some character(s) could不被转换成客户端的字符集。未转换的字节被更改为问号('?')。(严重性 16)“。你有什么想法 您的问题是 SQLINT1 数据类型。见php.net/manual/en/mssql.constants.php。 SQLINT1 是单字节,-128 到 127。请改用 SQLINT4。 非常感谢 SamStephens。我的问题已经解决了【参考方案2】:

您必须创建存储过程,以便将参数指示为 OUTPUT 变量。

DECLARE MyProc (@orderID int OUTPUT) AS ...

【讨论】:

所以我需要在 php 代码中创建特定的存储过程吗?我的意思是来自 sql server 的存储过程 没有。如果存储过程需要将@orderID 参数作为输出参数,您可以使用创建它的相同技术/工具来更改它。您是否希望存储过程将 @orderID 值发送到您的 PHP 代码?如果否,那么您想查看@SamStephens 的答案并保持程序不变。 我一切正常,但有一个问题。当我发送小 oderid(例如 1,225,100,596,..)时,它可以工作,但是当我发送大订单 ID 例如(100303)时,它没有给出输出,尽管有是这个订单的记录。所以我用 all most all 更改了 mssql_bind 的类型参数,然后我会得到一个警告“警告:mssql_execute() [function.mssql-execute]: WARNING! Some character(s) could不被转换成客户端的字符集。未转换的字节被更改为问号('?')。(严重性 16)“。你有什么想法 嗨,鲍勃,我从 SamStephens 那里得到了最后一个问题的答案,非常感谢鲍勃的关注。我的问题已经结束了

以上是关于从 php 执行时 SQL Server 存储过程错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值

从 Sql Server 2008 执行 oracle 存储过程

如何从存储过程启用 SQL Server 代理作业执行

使用 python pymssql 调用 sql server 存储过程

从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异

从存储过程执行 SQL Server 代理作业并返回作业结果