从 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 存储过程
使用 python pymssql 调用 sql server 存储过程