note 30022 added to ref.mssql
| From: | ahopper at agentmaster dot com | 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