Microsoft® ODBC Driver 11 para SQL Server® no RedHat Linux com PHP - apresenta um erro quando o parâmetro bind com o PDO para procedimentos armazenados
Sem nenhum parâmetro ele funcionará bem, mas quando os parâmetros estão lá, dá o seguinte erro -
SQLSTATE [42000]: Erro de sintaxe ou violação de acesso: 8018 [Microsoft] [Driver ODBC 11 para SQL Server] [SQL Server] Parâmetro inválido 4 (''): tipo de dados 0x23 é um objeto grande preterido, ou LOB, mas está marcado como parâmetro de saída. Tipos obsoletos não são suportados como parâmetros de saída. Use o objeto grande atual t (SQLExecute [8018] em /builddir/build/BUILD/php-5.3.3/ext/pdo_odbc/odbc_stmt.c:254)
Isso é executado no Centos 6, Driver ODBC 11 para SQL Server® - RedHat Linux, unixODBC-2.3.0, MSSQL Server 2008 R2
Seqüência de conexão:
$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);
Exemplo de procedimento armazenado usado:
$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'];
Procedimento armazenado simples para retornar "123"
[dbo].[sp_insert_into_t_contact_test]
@paravalue varchar(100)
AS
return 123
Informação adicional -
arquivo 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