|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-01-30 16:03 UTC] podunk dot vn at gmail dot com
Description: ------------ When selecting a varbinary(MAX) field from a microsoft sql 2005 database, using the Microsoft ODBC Driver Manager for SQL, and binding the result to a PHP variable, the Driver Manager fails with the following error: array ( 0 => 'HY090', 1 => 0, 2 => '[Microsoft][ODBC Driver Manager] Invalid string or buffer length (SQLBindCol[0] at ext\\pdo_odbc\\odbc_stmt.c:430)', 3 => 'HY090', ) More information on HY090 can be found at: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcsqlbindcol.asp Just a guess: the BufferLength isn't being set in odbc_stmt.c somewhere. Reproduce code: --------------- $stmt = $db->prepare("select data from cms_files where fid=11"); $db->execute($stmt); $db->bindColumn($stmt, 1, $lob, PDO::PARAM_LOB); $db->fetch_bound($stmt); Expected result: ---------------- $lob populated with binary data. Actual result: -------------- Driver Manager throws: array ( 0 => 'HY090', 1 => 0, 2 => '[Microsoft][ODBC Driver Manager] Invalid string or buffer length (SQLBindCol[0] at ext\\pdo_odbc\\odbc_stmt.c:430)', 3 => 'HY090', ) PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Dec 03 07:00:01 2025 UTC |
<?php $sql = " USE [websvr] GO /****** Object: Table [dbo].[cms_files] Script Date: 01/30/2007 13:25:58 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[cms_files]( [fid] [int] IDENTITY(1,1) NOT NULL, [data] [varbinary](max) NULL, [content_type] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [name] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [label] [nvarchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [pagid] [int] NOT NULL, CONSTRAINT [PK_files] PRIMARY KEY CLUSTERED ( [fid] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF "; $db = new PDO('odbc:DSN=******;HOSTNAME=*********;PORT=****;DBNAME=******;PROTOCOL=TCPIP;UID=********;PWD=********;'); $db->query($sql); $db->query("SET IDENTITY_INSERT cms_files ON"); $stmt = $db->prepare("insert into cms_files (data,content_type,name,label,pagid,fid) values (?, ?, ?, ?, ?, ?)"); $fp = fopen($_FILES['file']['tmp_name'], 'rb'); $stmt->bindParam(1, $fp, PDO::PARAM_LOB); $stmt->bindParam(2, $_FILES['file']['type']); $stmt->bindParam(3, $_FILES['file']['name']); $stmt->bindParam(4, 'test'); $stmt->bindParam(5, 1); $stmt->bindParam(6, 1); $stmt->execute(); $stmt = $db->prepare("select content_type,data from cms_files where fid=1"); $stmt->execute(); $stmt->bindColumn(1, $type, PDO::PARAM_STR, 256); $stmt->bindColumn(2, $lob, PDO::PARAM_LOB); $stmt->fetch(PDO::FETCH_BOUND); header("Content-Type: $type"); fpassthru($lob); print($lob); ?>