gpt4 book ai didi

php - Microsoft® ODBC Driver 11 for SQL Server® on RedHat Linux with PHP - 使用 PDO 为存储过程绑定(bind)参数时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:30 24 4
gpt4 key购买 nike

没有任何参数它可以正常工作,但是当参数存在时,会出现以下错误-

SQLSTATE[42000]:语法错误或访问冲突:8018 [Microsoft][SQL Server 的 ODBC 驱动程序 11][SQL Server]无效参数 4 (''):数据类型 0x23 是已弃用的大对象,或 LOB,但被标记为输出参数。不支持将已弃用的类型作为输出参数。使用当前大对象 t (SQLExecute[8018] at/builddir/build/BUILD/php-5.3.3/ext/pdo_odbc/odbc_stmt.c:254)

这运行于Centos 6、适用于 SQL Server® 的 ODBC 驱动程序 11 - RedHat Linux、unixODBC-2.3.0、MSSQL Server 2008 R2

连接字符串:

    $con = new PDO("odbc:dsnName", 'sa','saa');
$con->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$con->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);

使用的示例存储过程:

    $stmt = $con->prepare( "SET NOCOUNT ON DECLARE  @return_value int

EXEC @return_value = [sp_insert_into_t_contact_test]
@paravalue = ?

SELECT 'returnV' = @return_value");
$stmt->bindParam(1, $v1 = 5, PDO::PARAM_STR, 100);
$stmt->execute();
$return =$stmt->fetch();
echo $return['returnV'];

返回“123”的简单存储过程

    [dbo].[sp_insert_into_t_contact_test]
@paravalue varchar(100)
AS
return 123

附加信息 -

odbc.ini 文件 -

   [dsnName]
Driver=SQL Server Native Client 11.0
Description=My Sample ODBC Database Connection
Trace=Yes
Server=192.168.2.60
Port=1433
Database=NSCDB_3

odbcinst.ini

  [SQL Server Native Client 11.0]
Description=Microsoft ODBC Driver 11 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0
Threading=1
UsageCount=1

最佳答案

最后我找到了解决方案,Microsoft 驱动程序已经为 C 或 C++ 应用程序开发,PDO 参数绑定(bind)无法按预期工作。如果您不使用 PDO 传递参数,一切都会按预期进行。替换为 @paravalue = N'".$v1."'

例如-普通参数绑定(bind) - SQLBindParameterPDO 参数绑定(bind) - $stmt->bindParam(1, $v1 = 5, PDO::PARAM_STR, 100);

更正的鳕鱼片段:

        $stmt = $con->prepare( "SET NOCOUNT ON DECLARE  @return_value int

EXEC @return_value = [sp_insert_into_t_contact_test]
@paravalue = N'".$v1."'

SELECT 'returnV' = @return_value");
$stmt->execute();
$return =$stmt->fetch();
echo $return['returnV'];

关于php - Microsoft® ODBC Driver 11 for SQL Server® on RedHat Linux with PHP - 使用 PDO 为存储过程绑定(bind)参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18441721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com