(file) Return to mssql.php CVS log (file) (dir) Up to [RizwankCVS] / geekymedia_web / phpBB2 / db

  1 rizwank 1.1 <?php
  2             /***************************************************************************
  3              *                                 mssql.php
  4              *                            -------------------
  5              *   begin                : Saturday, Feb 13, 2001
  6              *   copyright            : (C) 2001 The phpBB Group
  7              *   email                : supportphpbb.com
  8              *
  9              *   $Id: mssql.php,v 1.22.2.2 2002/12/21 18:31:53 psotfx Exp $
 10              *
 11              ***************************************************************************/
 12             
 13             /***************************************************************************
 14              *
 15              *   This program is free software; you can redistribute it and/or modify
 16              *   it under the terms of the GNU General Public License as published by
 17              *   the Free Software Foundation; either version 2 of the License, or
 18              *   (at your option) any later version.
 19              *
 20              ***************************************************************************/
 21             
 22 rizwank 1.1 if(!defined("SQL_LAYER"))
 23             {
 24             
 25             define("SQL_LAYER","mssql");
 26             
 27             class sql_db
 28             {
 29             
 30             	var $db_connect_id;
 31             	var $result;
 32             
 33             	var $next_id;
 34             	var $in_transaction = 0;
 35             
 36             	var $row = array();
 37             	var $rowset = array();
 38             	var $limit_offset;
 39             	var $query_limit_success;
 40             
 41             	var $num_queries = 0;
 42             
 43 rizwank 1.1 	//
 44             	// Constructor
 45             	//
 46             	function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
 47             	{
 48             		$this->persistency = $persistency;
 49             		$this->user = $sqluser;
 50             		$this->password = $sqlpassword;
 51             		$this->server = $sqlserver;
 52             		$this->dbname = $database;
 53             
 54             		$this->db_connect_id = ( $this->persistency ) ? @mssql_pconnect($this->server, $this->user, $this->password) : @mssql_connect($this->server, $this->user, $this->password);
 55             
 56             		if( $this->db_connect_id && $this->dbname != "" )
 57             		{
 58             			if( !mssql_select_db($this->dbname, $this->db_connect_id) )
 59             			{
 60             				mssql_close($this->db_connect_id);
 61             				return false;
 62             			}
 63             		}
 64 rizwank 1.1 
 65             		return $this->db_connect_id;
 66             	}
 67             
 68             	//
 69             	// Other base methods
 70             	//
 71             	function sql_close()
 72             	{
 73             		if($this->db_connect_id)
 74             		{
 75             			//
 76             			// Commit any remaining transactions
 77             			//
 78             			if( $this->in_transaction )
 79             			{
 80             				@mssql_query("COMMIT", $this->db_connect_id);
 81             			}
 82             
 83             			return @mssql_close($this->db_connect_id);
 84             		}
 85 rizwank 1.1 		else
 86             		{
 87             			return false;
 88             		}
 89             	}
 90             
 91             
 92             	//
 93             	// Query method
 94             	//
 95             	function sql_query($query = '', $transaction = FALSE)
 96             	{
 97             		//
 98             		// Remove any pre-existing queries
 99             		//
100             		unset($this->result);
101             		unset($this->row);
102             
103             		if ( $query != '' )
104             		{
105             			$this->num_queries++;
106 rizwank 1.1 
107             			if ( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
108             			{
109             				if ( !@mssql_query('BEGIN TRANSACTION', $this->db_connect_id) )
110             				{
111             					return false;
112             				}
113             				$this->in_transaction = TRUE;
114             			}
115             
116             			//
117             			// Does query contain any LIMIT code? If so pull out relevant start and num_results
118             			// This isn't terribly easy with MSSQL, whatever you do will potentially impact
119             			// performance compared to an 'in-built' limit
120             			//
121             			// Another issue is the 'lack' of a returned true value when a query is valid but has
122             			// no result set (as with all the other DB interfaces). It seems though that it's
123             			// 'fair' to say that if a query returns a false result (ie. no resource id) then the
124             			// SQL was valid but had no result set. If the query returns nothing but the rowcount
125             			// returns something then there's a problem. This may well be a false assumption though
126             			// ... needs checking under Windows itself.
127 rizwank 1.1 			//
128             			if( preg_match('#^SELECT(.*?)(LIMIT ([0-9]+)[, ]*([0-9]+)*)?$#s', $query, $limits) )
129             			{
130             				$query = $limits[1];
131             
132             				if( !empty($limits[2]) )
133             				{
134             					$row_offset = ( $limits[4] ) ? $limits[3] : "";
135             					$num_rows = ( $limits[4] ) ? $limits[4] : $limits[3];
136             
137             					$query = 'TOP ' . ( $row_offset + $num_rows ) . $query;
138             				}
139             
140             				$this->result = @mssql_query("SELECT $query", $this->db_connect_id); 
141             
142             				if( $this->result )
143             				{
144             					$this->limit_offset[$this->result] = ( !empty($row_offset) ) ? $row_offset : 0;
145             
146             					if( $row_offset > 0 )
147             					{
148 rizwank 1.1 						@mssql_data_seek($this->result, $row_offset);
149             					}
150             				}
151             			}
152             			else if( preg_match('#^INSERT #i', $query) )
153             			{
154             				if( @mssql_query($query, $this->db_connect_id) )
155             				{
156             					$this->result = time() + microtime();
157             
158             					$result_id = @mssql_query('SELECT @@IDENTITY AS id, @@ROWCOUNT as affected', $this->db_connect_id);
159             					if( $result_id )
160             					{
161             						if( $row = @mssql_fetch_array($result_id) )
162             						{
163             							$this->next_id[$this->db_connect_id] = $row['id'];	
164             							$this->affected_rows[$this->db_connect_id] = $row['affected'];
165             						}
166             					}
167             				}
168             			}
169 rizwank 1.1 			else
170             			{
171             				if( @mssql_query($query, $this->db_connect_id) )
172             				{
173             					$this->result = time() + microtime();
174             
175             					$result_id = @mssql_query('SELECT @@ROWCOUNT as affected', $this->db_connect_id);
176             					if( $result_id )
177             					{
178             						if( $row = @mssql_fetch_array($result_id) )
179             						{
180             							$this->affected_rows[$this->db_connect_id] = $row['affected'];
181             						}
182             					}
183             				}
184             			}
185             
186             			if( !$this->result )
187             			{
188             				if( $this->in_transaction )
189             				{
190 rizwank 1.1 					@mssql_query('ROLLBACK', $this->db_connect_id);
191             					$this->in_transaction = FALSE;
192             				}
193             
194             				return false;
195             			}
196             
197             			if( $transaction == END_TRANSACTION && $this->in_transaction )
198             			{
199             				$this->in_transaction = FALSE;
200             
201             				if( !@mssql_query('COMMIT', $this->db_connect_id) )
202             				{
203             					@mssql_query("ROLLBACK", $this->db_connect_id);
204             					return false;
205             				}
206             			}
207             
208             			return $this->result;
209             		}
210             		else
211 rizwank 1.1 		{
212             			if( $transaction == END_TRANSACTION && $this->in_transaction  )
213             			{
214             				$this->in_transaction = FALSE;
215             
216             				if( !@mssql_query('COMMIT', $this->db_connect_id) )
217             				{
218             					@mssql_query('ROLLBACK', $this->db_connect_id);
219             					return false;
220             				}
221             			}
222             
223             			return true;
224             		}
225             	}
226             
227             	//
228             	// Other query methods
229             	//
230             	function sql_numrows($query_id = 0)
231             	{
232 rizwank 1.1 		if( !$query_id )
233             		{
234             			$query_id = $this->result;
235             		}
236             
237             		if( $query_id )
238             		{
239             			return ( !empty($this->limit_offset[$query_id]) ) ? @mssql_num_rows($query_id) - $this->limit_offset[$query_id] : @mssql_num_rows($query_id);
240             		}
241             		else
242             		{
243             			return false;
244             		}
245             	}
246             
247             	function sql_numfields($query_id = 0)
248             	{
249             		if( !$query_id )
250             		{
251             			$query_id = $this->result;
252             		}
253 rizwank 1.1 
254             		return ( $query_id ) ? @mssql_num_fields($query_id) : false;
255             	}
256             
257             	function sql_fieldname($offset, $query_id = 0)
258             	{
259             		if( !$query_id )
260             		{
261             			$query_id = $this->result;
262             		}
263             
264             		return ( $query_id ) ? @mssql_field_name($query_id, $offset) : false;
265             	}
266             
267             	function sql_fieldtype($offset, $query_id = 0)
268             	{
269             		if(!$query_id)
270             		{
271             			$query_id = $this->result;
272             		}
273             
274 rizwank 1.1 		return ( $query_id ) ? @mssql_field_type($query_id, $offset) : false;
275             	}
276             
277             	function sql_fetchrow($query_id = 0)
278             	{
279             		if( !$query_id )
280             		{
281             			$query_id = $this->result;
282             		}
283             
284             		if( $query_id )
285             		{
286             			empty($row);
287             
288             			$row = @mssql_fetch_array($query_id);
289             
290             			while( list($key, $value) = @each($row) )
291             			{
292             				$row[$key] = stripslashes($value);
293             			}
294             			@reset($row);
295 rizwank 1.1 
296             			return $row;
297             		}
298             		else
299             		{
300             			return false;
301             		}
302             	}
303             
304             	function sql_fetchrowset($query_id = 0)
305             	{
306             		if( !$query_id )
307             		{
308             			$query_id = $this->result;
309             		}
310             
311             		if( $query_id )
312             		{
313             			$i = 0;
314             			empty($rowset);
315             
316 rizwank 1.1 			while( $row = @mssql_fetch_array($query_id))
317             			{
318             				while( list($key, $value) = @each($row) )
319             				{
320             					$rowset[$i][$key] = stripslashes($value);
321             				}
322             				$i++;
323             			}
324             			@reset($rowset);
325             
326             			return $rowset;
327             		}
328             		else
329             		{
330             			return false;
331             		}
332             	}
333             
334             	function sql_fetchfield($field, $row = -1, $query_id)
335             	{
336             		if( !$query_id )
337 rizwank 1.1 		{
338             			$query_id = $this->result;
339             		}
340             
341             		if( $query_id )
342             		{
343             			if( $row != -1 )
344             			{
345             				if( $this->limit_offset[$query_id] > 0 )
346             				{
347             					$result = ( !empty($this->limit_offset[$query_id]) ) ? @mssql_result($this->result, ($this->limit_offset[$query_id] + $row), $field) : false;
348             				}
349             				else
350             				{
351             					$result = @mssql_result($this->result, $row, $field);
352             				}
353             			}
354             			else
355             			{
356             				if( empty($this->row[$query_id]) )
357             				{
358 rizwank 1.1 					$this->row[$query_id] = @mssql_fetch_array($query_id);
359             					$result = stripslashes($this->row[$query_id][$field]);
360             				}
361             			}
362             
363             			return $result;
364             		}
365             		else
366             		{
367             			return false;
368             		}
369             	}
370             
371             	function sql_rowseek($rownum, $query_id = 0)
372             	{
373             		if( !$query_id )
374             		{
375             			$query_id = $this->result;
376             		}
377             
378             		if( $query_id )
379 rizwank 1.1 		{
380             			return ( !empty($this->limit_offset[$query_id]) ) ? @mssql_data_seek($query_id, ($this->limit_offset[$query_id] + $rownum)) : @mssql_data_seek($query_id, $rownum);
381             		}
382             		else
383             		{
384             			return false;
385             		}
386             	}
387             
388             	function sql_nextid()
389             	{
390             		return ( $this->next_id[$this->db_connect_id] ) ? $this->next_id[$this->db_connect_id] : false;
391             	}
392             
393             	function sql_affectedrows()
394             	{
395             		return ( $this->affected_rows[$this->db_connect_id] ) ? $this->affected_rows[$this->db_connect_id] : false;
396             	}
397             
398             	function sql_freeresult($query_id = 0)
399             	{
400 rizwank 1.1 		if( !$query_id )
401             		{
402             			$query_id = $this->result;
403             		}
404             
405             		return ( $query_id ) ? @mssql_free_result($query_id) : false;
406             	}
407             
408             	function sql_error($query_id = 0)
409             	{
410             		$result['message'] = @mssql_get_last_message();
411             		return $result;
412             	}
413             
414             } // class sql_db
415             
416             } // if ... define
417             
418             ?>

Rizwan Kassim
Powered by
ViewCVS 0.9.2