PHP,SQL Server:将二进制数据与存储过程一起使用

时间:2010-11-01 17:01:29

标签: php sql sql-server sql-server-2008 stored-procedures

PHP 5.2.13,MS SQL Server 2008 R2

我有一个看起来像这样的存储过程:

CREATE PROCEDURE [dbo].[StoreThing]
    @pid int = 0,
    @data binary(236) = NULL,
AS
BEGIN
    INSERT INTO thingTable (pid, data) VALUES (@pid, @data)
END

(非常简化,但这不是重点)

我正在尝试从PHP脚本中调用此过程,如下所示:

function storeThing($pid, $data) {
    global $dbconn;

    if(strlen($data) != 236) return false;

    $proc = mssql_init('StoreThing', $dbconn);

    mssql_bind($proc, '@pid', $pid, SQLINT4);
    mssql_bind($proc, '@data', $data, SQLCHAR, false, false, 236);

    $result = mssql_execute($proc);
    if(!$result) die(mssql_get_last_message());

    return true;
}

然而,这不是很正常。运行时出现以下错误:

Warning: mssql_execute() [function.mssql-execute]: message: Implicit conversion from data type char to binary is not allowed. Use the CONVERT function to run this query. (severity 16)

显然,问题是我为数据字段设置的SQLCHAR类型。但是,由于没有SQLBINARY常量,我不知道该将它设置为什么。

或者,我是否必须更改存储过程以适应PHP?我能做到这一点,但似乎有点愚蠢。

1 个答案:

答案 0 :(得分:1)

您可以使用Microsoft SQL Server API,请参阅http://msdn.microsoft.com/en-us/library/cc793139%28SQL.90%29.aspx