note 30022 added to ref.mssql

From: Date: Tue, 04 Mar 2003 14:00:30 +0000
Subject: note 30022 added to ref.mssql
Groups: php.notes 
Request: Send a blank email to php-notes+get-44827@lists.php.net to get a copy of this message
I've repeatedly run into problems with the 255 character limitation in PHP's MSSQL extension, so I threw together this stored procedure to break up data greater than 255 characters into a series of columns. I hope this helps those looking to pull binary data from MSSQL Server. ____________________________________ Example Usage: <? mssql_connect("localhost","agentmaster",""); mssql_select_db("agentmaster"); $query = mssql_query("sp_GetStuff @table='pics',@field='medium_photo',@where='id=462891'"); $cols = mssql_fetch_row($query); foreach($cols as $chunk) { $data.= $chunk; } echo $data; mssql_close(); ?> ____________________________________ Stored Procedure: CREATE PROCEDURE sp_GetStuff ( @table VARCHAR(100), @field VARCHAR(100), @where VARCHAR(100) ) AS SET ANSI_NULLS ON SET ANSI_WARNINGS ON DECLARE @sql VARCHAR(8000) SET @sql = ' DECLARE @DataLength INT, @bytes INT, @i INT, @start INT, @sql VARCHAR(8000), @sql1 VARCHAR(8000), @sql2 VARCHAR(8000), @sql3 VARCHAR(8000), @sql4 VARCHAR(8000), @sql5 VARCHAR(8000), @holder VARCHAR(8000) SET @DataLength = 0 SET @DataLength = (SELECT DATALENGTH(' + @field + ') as dataLength FROM ' + @table + ' WHERE ' + @where + ') IF(@DataLength > 0) BEGIN SET @sql1 = ''SELECT '' SET @sql2 = '''' SET @sql3 = '''' SET @sql4 = '''' SET @sql5 = '''' SET @bytes = 0 SET @i = 0 WHILE @bytes <= @DataLength BEGIN SET @start = @bytes IF(@bytes > 0) SET @holder = '','' ELSE SET @holder = '''' SET @bytes = @bytes + 255 SET @i = @i + 1 SET @holder = @holder + ''SUBSTRING(' + @field + ','' + convert(varchar(5),@start) + '',255) as c'' + CONVERT(varchar(5),@i) IF (LEN(@sql1) + LEN(@holder) < 4000) SET @sql1 = @sql1 + @holder IF ((LEN(@sql2) + LEN(@holder) < 4000) AND (LEN(@sql1) + LEN(@holder) > 4000)) SET @sql2 = @sql2 + @holder IF ((LEN(@sql3) + LEN(@holder)) < 4000) AND ((LEN(@sql1) + LEN(@sql2) + LEN(@holder) > 8000)) SET @sql3 = @sql3 + @holder IF((LEN(@sql4) + LEN(@holder)) < 4000) AND ((LEN(@sql1) + LEN(@sql2) + LEN(@sql3) + LEN(@holder) > 12000)) SET @sql4 = @sql4 + @holder IF ((LEN(@sql5) + LEN(@holder)) < 4000) AND ((LEN(@sql1) + LEN(@sql2) + LEN(@sql3) + LEN(@sql4) + LEN(@holder) > 16000)) SET @sql5 = @sql5 + @holder END exec(@sql1 + @sql2 + @sql3 + @sql4 + @sql5 + '' FROM ' + @table + ' WHERE ' + @where + ''') END' exec(@sql) -- http://www.php.net/manual/en/ref.mssql.php http://master.php.net/manage/user-notes.php?action=edit+30022 http://master.php.net/manage/user-notes.php?action=delete+30022 http://master.php.net/manage/user-notes.php?action=reject+30022

« previous php.notes (#44827) next »