Verzeichnisstruktur phpBB-2.0.0


Veröffentlicht
03.04.2002

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

mssql-odbc.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 8.18 KiB


001  <?php
002  /***************************************************************************
003   *                              mssql-odbc.php
004   *                            -------------------
005   *   begin                : Saturday, Feb 13, 2001
006   *   copyright            : (C) 2001 The phpBB Group
007   *   email                : support@phpbb.com
008   *
009   *   $Id$
010   *
011   ***************************************************************************/
012   
013  /***************************************************************************
014   *
015   *   This program is free software; you can redistribute it and/or modify
016   *   it under the terms of the GNU General Public License as published by
017   *   the Free Software Foundation; either version 2 of the License, or
018   *   (at your option) any later version.
019   *
020   ***************************************************************************/
021   
022  if(!defined("SQL_LAYER"))
023  {
024   
025  define("SQL_LAYER","mssql-odbc");
026   
027  class sql_db
028  {
029   
030      var $db_connect_id;
031      var $result;
032   
033      var $next_id;
034   
035      var $num_rows = array();
036      var $current_row = array();
037      var $field_names = array();
038      var $field_types = array();
039      var $result_rowset = array();
040   
041      var $num_queries = 0;
042   
043      //
044      // Constructor
045      //
046      function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
047      {
048          $this->persistency = $persistency;
049          $this->server = $sqlserver;
050          $this->user = $sqluser;
051          $this->password = $sqlpassword;
052          $this->dbname = $database;
053   
054          $this->db_connect_id = ($this->persistency) ? odbc_pconnect($this->server, $this->user, $this->password) : odbc_connect($this->server, $this->user, $this->password);
055   
056          return ( $this->db_connect_id ) ? $this->db_connect_id : false;
057      }
058      //
059      // Other base methods
060      //
061      function sql_close()
062      {
063          if($this->db_connect_id)
064          {
065              if( $this->in_transaction )
066              {
067                  @odbc_commit($this->db_connect_id);
068              }
069   
070              if( count($this->result_rowset) )
071              {
072                  unset($this->result_rowset);
073                  unset($this->field_names);
074                  unset($this->field_types);
075                  unset($this->num_rows);
076                  unset($this->current_row);
077              }
078   
079              return @odbc_close($this->db_connect_id);
080          }
081          else
082          {
083              return false;
084          }
085      }
086   
087      //
088      // Query method
089      //
090      function sql_query($query = "", $transaction = FALSE)
091      {
092          if( $query != "" )
093          {
094              $this->num_queries++;
095   
096              if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
097              {
098                  if( !odbc_autocommit($this->db_connect_id, false) )
099                  {
100                      return false;
101                  }
102                  $this->in_transaction = TRUE;
103              }
104   
105              if( preg_match("/^SELECT(.*?)(LIMIT ([0-9]+)[, ]*([0-9]+)*)?$/s", $query, $limits) )
106              {
107                  $query = $limits[1];
108   
109                  if( !empty($limits[2]) )
110                  {
111                      $row_offset = ( $limits[4] ) ? $limits[3] : "";
112                      $num_rows = ( $limits[4] ) ? $limits[4] : $limits[3];
113   
114                      $query = "TOP " . ( $row_offset + $num_rows ) . $query;
115                  }
116   
117                  $this->result = odbc_exec($this->db_connect_id, "SELECT $query"); 
118   
119                  if( $this->result )
120                  {
121                      if( empty($this->field_names[$this->result]) )
122                      {
123                          for($i = 1; $i < odbc_num_fields($this->result) + 1; $i++)
124                          {
125                              $this->field_names[$this->result][] = odbc_field_name($this->result, $i);
126                              $this->field_types[$this->result][] = odbc_field_type($this->result, $i);
127                          }
128                      }
129   
130                      $this->current_row[$this->result] = 0;
131                      $this->result_rowset[$this->result] = array();
132   
133                      $row_outer = ( isset($row_offset) ) ? $row_offset + 1 : 1;
134                      $row_outer_max = ( isset($num_rows) ) ? $row_offset + $num_rows + 1 : 1E9;
135                      $row_inner = 0;
136   
137                      while( odbc_fetch_row($this->result, $row_outer) && $row_outer < $row_outer_max )
138                      {
139                          for($j = 0; $j < count($this->field_names[$this->result]); $j++)
140                          {
141                              $this->result_rowset[$this->result][$row_inner][$this->field_names[$this->result][$j]] = stripslashes(odbc_result($this->result, $j + 1));
142                          }
143   
144                          $row_outer++;
145                          $row_inner++;
146                      }
147   
148                      $this->num_rows[$this->result] = count($this->result_rowset[$this->result]);    
149                  }
150   
151              }
152              else if( eregi("^INSERT ", $query) )
153              {
154                  $this->result = odbc_exec($this->db_connect_id, $query);
155   
156                  if( $this->result )
157                  {
158                      $result_id = odbc_exec($this->db_connect_id, "SELECT @@IDENTITY");
159                      if( $result_id )
160                      {
161                          if( odbc_fetch_row($result_id) )
162                          {
163                              $this->next_id[$this->db_connect_id] = odbc_result($result_id, 1);    
164                              $this->affected_rows[$this->db_connect_id] = odbc_num_rows($this->result);
165                          }
166                      }
167                  }
168              }
169              else
170              {
171                  $this->result = odbc_exec($this->db_connect_id, $query);
172   
173                  if( $this->result )
174                  {
175                      $this->affected_rows[$this->db_connect_id] = odbc_num_rows($this->result);
176                  }
177              }
178   
179              if( !$this->result )
180              {
181                  if( $this->in_transaction )
182                  {
183                      odbc_rollback($this->db_connect_id);
184                      odbc_autocommit($this->db_connect_id, true);
185                      $this->in_transaction = FALSE;
186                  }
187   
188                  return false;
189              }
190   
191              if( $transaction == END_TRANSACTION && $this->in_transaction )
192              {
193                  $this->in_transaction = FALSE;
194   
195                  if ( !odbc_commit($this->db_connect_id) )
196                  {
197                      odbc_rollback($this->db_connect_id);
198                      odbc_autocommit($this->db_connect_id, true);
199                      return false;
200                  }
201                  odbc_autocommit($this->db_connect_id, true);
202              }
203   
204              odbc_free_result($this->result);
205   
206              return $this->result;
207          }
208          else
209          {
210              if( $transaction == END_TRANSACTION && $this->in_transaction )
211              {
212                  $this->in_transaction = FALSE;
213   
214                  if ( !@odbc_commit($this->db_connect_id) )
215                  {
216                      odbc_rollback($this->db_connect_id);
217                      odbc_autocommit($this->db_connect_id, true);
218                      return false;
219                  }
220                  odbc_autocommit($this->db_connect_id, true);
221              }
222   
223              return true;
224          }
225      }
226   
227      //
228      // Other query methods
229      //
230      function sql_numrows($query_id = 0)
231      {
232          if( !$query_id ) 
233          {
234              $query_id = $this->result;
235          }
236   
237          return ( $query_id ) ? $this->num_rows[$query_id] : false;
238      }
239   
240      function sql_numfields($query_id = 0)
241      {
242          if( !$query_id )
243          {
244              $query_id = $this->result;
245          }
246   
247          return ( $query_id ) ? count($this->field_names[$query_id]) : false;
248      }
249   
250      function sql_fieldname($offset, $query_id = 0)
251      {
252          if( !$query_id )
253          {
254              $query_id = $this->result;
255          }
256   
257          return ( $query_id ) ? $this->field_names[$query_id][$offset] : false;
258      }
259   
260      function sql_fieldtype($offset, $query_id = 0)
261      {
262          if( !$query_id )
263          {
264              $query_id = $this->result;
265          }
266   
267          return ( $query_id ) ? $this->field_types[$query_id][$offset] : false;
268      }
269   
270      function sql_fetchrow($query_id = 0)
271      {
272          if( !$query_id )
273          {
274              $query_id = $this->result;
275          }
276   
277          if( $query_id )
278          {
279              return ( $this->num_rows[$query_id] && $this->current_row[$query_id] < $this->num_rows[$query_id] ) ? $this->result_rowset[$query_id][$this->current_row[$query_id]++] : false;
280          }
281          else
282          {
283              return false;
284          }
285      }
286   
287      function sql_fetchrowset($query_id = 0)
288      {
289          if( !$query_id )
290          {
291              $query_id = $this->result;
292          }
293   
294          if( $query_id )
295          {
296              return ( $this->num_rows[$query_id] ) ? $this->result_rowset[$query_id] : false;
297          }
298          else
299          {
300              return false;
301          }
302      }
303   
304      function sql_fetchfield($field, $row = -1, $query_id = 0)
305      {
306          if( !$query_id )
307          {
308              $query_id = $this->result;
309          }
310   
311          if( $query_id )
312          {
313              if( $row < $this->num_rows[$query_id] )
314              {
315                  $getrow = ( $row == -1 ) ? $this->current_row[$query_id] - 1 : $row;
316   
317                  return $this->result_rowset[$query_id][$getrow][$this->field_names[$query_id][$field]];
318   
319              }
320              else
321              {
322                  return false;
323              }
324          }
325          else
326          {
327              return false;
328          }
329      }
330   
331      function sql_rowseek($offset, $query_id = 0)
332      {
333          if( !$query_id )
334          {
335              $query_id = $this->result;
336          }
337   
338          if( $query_id )
339          {
340              $this->current_row[$query_id] = $offset - 1;
341              return true;
342          }
343          else
344          {
345              return false;
346          }
347      }
348   
349      function sql_nextid()
350      {
351          return ( $this->next_id[$this->db_connect_id] ) ? $this->next_id[$this->db_connect_id] : false;
352      }
353   
354      function sql_affectedrows()
355      {
356          return ( $this->affected_rows[$this->db_connect_id] ) ? $this->affected_rows[$this->db_connect_id] : false;
357      }
358   
359      function sql_freeresult($query_id = 0)
360      {
361          if( !$query_id )
362          {
363              $query_id = $this->result;
364          }
365   
366          unset($this->num_rows[$query_id]);
367          unset($this->current_row[$query_id]);
368          unset($this->result_rowset[$query_id]);
369          unset($this->field_names[$query_id]);
370          unset($this->field_types[$query_id]);
371   
372          return true;
373      }
374   
375      function sql_error()
376      {
377          $error['code'] = odbc_error($this->db_connect_id);
378          $error['message'] = odbc_errormsg($this->db_connect_id);
379   
380          return $error;
381      }
382   
383  } // class sql_db
384   
385  } // if ... define
386   
387  ?>