AutorÃa | Ultima modificación | Ver Log |
<?php/*** Microsoft SQL Server ADO driver.** Requires ADO and MSSQL client. Works only on MS Windows.** This file is part of ADOdb, a Database Abstraction Layer library for PHP.** @package ADOdb* @link https://adodb.org Project's web site and documentation* @link https://github.com/ADOdb/ADOdb Source code and issue tracker** The ADOdb Library is dual-licensed, released under both the BSD 3-Clause* and the GNU Lesser General Public Licence (LGPL) v2.1 or, at your option,* any later version. This means you can use it in proprietary products.* See the LICENSE.md file distributed with this source code for details.* @license BSD-3-Clause* @license LGPL-2.1-or-later** @copyright 2000-2013 John Lim* @copyright 2014 Damien Regad, Mark Newnham and the ADOdb community*/// security - hide pathsif (!defined('ADODB_DIR')) die();if (!defined('_ADODB_ADO_LAYER')) {include_once(ADODB_DIR . "/drivers/adodb-ado5.inc.php");}class ADODB_ado_mssql extends ADODB_ado {var $databaseType = 'ado_mssql';var $hasTop = 'top';var $hasInsertID = true;var $sysDate = 'convert(datetime,convert(char,GetDate(),102),102)';var $sysTimeStamp = 'GetDate()';var $leftOuter = '*=';var $rightOuter = '=*';var $ansiOuter = true; // for mssql7 or latervar $substr = "substring";var $length = 'len';var $_dropSeqSQL = "drop table %s";//var $_inTransaction = 1; // always open recordsets, so no transaction problems.protected function _insertID($table = '', $column = ''){return $this->GetOne('select SCOPE_IDENTITY()');}function _affectedrows(){return $this->GetOne('select @@rowcount');}function SetTransactionMode( $transaction_mode ){$this->_transmode = $transaction_mode;if (empty($transaction_mode)) {$this->Execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED');return;}if (!stristr($transaction_mode,'isolation')) $transaction_mode = 'ISOLATION LEVEL '.$transaction_mode;$this->Execute("SET TRANSACTION ".$transaction_mode);}function qStr($s, $magic_quotes=false){$s = ADOConnection::qStr($s);return str_replace("\0", "\\\\000", $s);}function MetaColumns($table, $normalize=true){$table = strtoupper($table);$arr= array();$dbc = $this->_connectionID;$osoptions = array();$osoptions[0] = null;$osoptions[1] = null;$osoptions[2] = $table;$osoptions[3] = null;$adors=@$dbc->OpenSchema(4, $osoptions);//tablesif ($adors){while (!$adors->EOF){$fld = new ADOFieldObject();$c = $adors->Fields(3);$fld->name = $c->Value;$fld->type = 'CHAR'; // cannot discover type in ADO!$fld->max_length = -1;$arr[strtoupper($fld->name)]=$fld;$adors->MoveNext();}$adors->Close();}$false = false;return empty($arr) ? $false : $arr;}function CreateSequence($seq='adodbseq',$start=1){$this->Execute('BEGIN TRANSACTION adodbseq');$start -= 1;$this->Execute("create table $seq (id float(53))");$ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");if (!$ok) {$this->Execute('ROLLBACK TRANSACTION adodbseq');return false;}$this->Execute('COMMIT TRANSACTION adodbseq');return true;}function GenID($seq='adodbseq',$start=1){//$this->debug=1;$this->Execute('BEGIN TRANSACTION adodbseq');$ok = $this->Execute("update $seq with (tablock,holdlock) set id = id + 1");if (!$ok) {$this->Execute("create table $seq (id float(53))");$ok = $this->Execute("insert into $seq with (tablock,holdlock) values($start)");if (!$ok) {$this->Execute('ROLLBACK TRANSACTION adodbseq');return false;}$this->Execute('COMMIT TRANSACTION adodbseq');return $start;}$num = $this->GetOne("select id from $seq");$this->Execute('COMMIT TRANSACTION adodbseq');return $num;// in old implementation, pre 1.90, we returned GUID...//return $this->GetOne("SELECT CONVERT(varchar(255), NEWID()) AS 'Char'");}} // end classclass ADORecordSet_ado_mssql extends ADORecordSet_ado {var $databaseType = 'ado_mssql';}