没有任何参数它将正常工作,但当参数存在时,会出现以下错误 -
SQLSTATE [42000]:语法错误或访问冲突:8018 [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]无效的参数4(''):数据类型0x23是不推荐使用的大对象,或LOB,但标记为输出参数。不支持不推荐使用的类型作为输出参数。使用当前大对象t(/builddir/build/BUILD/php-5.3.3/ext/pdo_odbc/odbc_stmt.c:254中的SQLExecute [8018])
这样运行 Centos 6,用于SQLServer®的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
答案 0 :(得分:1)
最后我找到了解决方案,Microsoft驱动程序已针对C或C ++应用程序进行开发,并且PDO参数绑定无法按预期工作。如果您传递参数而不使用PDO ,一切都按预期工作。替换为@paravalue = N'".$v1."'
前例 -
正常参数绑定 - SQLBindParameter
PDO参数绑定 - $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'];