From d212773f1edd0bc9598d8b9727689438cf0ee293 Mon Sep 17 00:00:00 2001 From: mdean Date: Mon, 17 Sep 2001 00:26:39 +0000 Subject: [PATCH] Upgraded stuff - added db_addslashes() function. --- phpgwapi/inc/class.db_mssql.inc.php | 524 ++++++++++++++-------------- 1 file changed, 269 insertions(+), 255 deletions(-) diff --git a/phpgwapi/inc/class.db_mssql.inc.php b/phpgwapi/inc/class.db_mssql.inc.php index 273b95a16e..7bbce2bc0a 100644 --- a/phpgwapi/inc/class.db_mssql.inc.php +++ b/phpgwapi/inc/class.db_mssql.inc.php @@ -19,333 +19,347 @@ /* echo "
This is using the MSSQL class
"; */ // ^^ really ?! :) - class db +class db +{ + var $Host = ''; + var $Database = ''; + var $User = ''; + var $Password = ''; + + var $Link_ID = 0; + var $Query_ID = 0; + var $Record = array(); + var $Row = 0; + var $VEOF = -1; + + var $Errno = 0; + var $Error = ''; + var $use_pconnect = false; + var $Auto_Free = 0; ## set this to 1 to automatically free results + var $Debug = false; + + function connect() { - var $Host = ''; - var $Database = ''; - var $User = ''; - var $Password = ''; - - var $Link_ID = 0; - var $Query_ID = 0; - var $Record = array(); - var $Row = 0; - var $VEOF = -1; - - var $Errno = 0; - var $Error = ''; - var $use_pconnect = True; - var $Auto_Free = 0; ## set this to 1 to automatically free results - - function connect() + if ( 0 == $this->Link_ID ) { - if ( 0 == $this->Link_ID ) + if ($this->use_pconnect) { - if ($this->use_pconnect) - { - $this->Link_ID=mssql_pconnect($this->Host, $this->User, $this->Password); - } - else - { - $this->Link_ID=mssql_connect($this->Host, $this->User, $this->Password); - } - if (!$this->Link_ID) - { - $this->halt("Link-ID == false, mssql_pconnect failed"); - } - else - { - mssql_select_db($this->Database, $this->Link_ID); - } + $this->Link_ID=mssql_pconnect($this->Host, $this->User, $this->Password); + } + else + { + $this->Link_ID=mssql_connect($this->Host, $this->User, $this->Password); } - } - - function free_result() - { - mssql_free_result($this->Query_ID); - $this->Query_ID = 0; - $this->VEOF = -1; - } - - function query($Query_String, $line = '', $file = '') - { - $this->VEOF = -1; - if (!$this->Link_ID) { - $this->connect(); + $this->halt("Link-ID == false, mssql_pconnect failed"); } - - $this->Query_ID = mssql_query($Query_String, $this->Link_ID); - $this->Row = 0; - if (!$this->Query_ID) + else { - $this->halt("Invalid SQL: " . $Query_String, $line, $file); + mssql_select_db($this->Database, $this->Link_ID); } - return $this->Query_ID; } + } + + function disconnect() + { + } + + function db_addslashes($str) + { + if (!IsSet($str) || $str == '') + return ''; + + return ereg_replace("'", "''", $str); + } + + function free_result() + { + mssql_free_result($this->Query_ID); + $this->Query_ID = 0; + $this->VEOF = -1; + } + + function query($Query_String, $line = '', $file = '') + { + $this->VEOF = -1; + + if (!$this->Link_ID) + { + $this->connect(); + } + + $this->Query_ID = mssql_query($Query_String, $this->Link_ID); + $this->Row = 0; + if (!$this->Query_ID) + { + $this->halt("Invalid SQL: " . $Query_String, $line, $file); + } + return $this->Query_ID; + } // I don't have access to M$-SQL, can someone finish these 2 functions ? (jengo) - function to_timestamp($epoch) - { - return False; - } + function to_timestamp($epoch) + { + return False; + } - function from_timestamp($timestamp) - { - return False; - } + function from_timestamp($timestamp) + { + return False; + } // public: perform a query with limited result set - function limit_query($Query_String, $offset, $line = '', $file = '', $num_rows = '') + function limit_query($Query_String, $offset, $line = '', $file = '', $num_rows = '') + { + global $phpgw_info; + + if (! $num_rows) { - global $phpgw_info; - - if (! $num_rows) - { - $num_rows = $phpgw_info['user']['preferences']['common']['maxmatchs']; - } - - if ($this->Debug) - { - printf("Debug: limit_query = %s
offset=%d, num_rows=%d
\n", $Query_String, $offset, $num_rows); - } - - $this->query($Query_String, $line, $file); - if ($this->Query_ID) - { - $this->Row = $offset; - // Push cursor to appropriate row in case next_record() is used - if ($offset > 0) - { - @mssql_data_seek($this->Query_ID, $offset); - } - $this->VEOF = $offset + $num_rows - 1; - } - - return $this->Query_ID; + $num_rows = $phpgw_info['user']['preferences']['common']['maxmatchs']; } - function next_record() + if ($this->Debug) { - if (!$this->Query_ID) - { - $this->halt("next_record called with no query pending."); - return 0; - } + printf("Debug: limit_query = %s
offset=%d, num_rows=%d
\n", $Query_String, $offset, $num_rows); + } - if ($this->VEOF == -1 || ($this->Row++ <= $this->VEOF)) + $this->query($Query_String, $line, $file); + if ($this->Query_ID) + { + $this->Row = $offset; + // Push cursor to appropriate row in case next_record() is used + if ($offset > 0) { + @mssql_data_seek($this->Query_ID, $offset); + } + $this->VEOF = $offset + $num_rows - 1; + } + + return $this->Query_ID; + } + + function next_record() + { + if (!$this->Query_ID) + { + $this->halt("next_record called with no query pending."); + return 0; + } + + if ($this->VEOF == -1 || ($this->Row++ <= $this->VEOF)) + { // Work around for buggy mssql_fetch_array - $rec = @mssql_fetch_row($this->Query_ID); - if ($rec) + $rec = @mssql_fetch_row($this->Query_ID); + if ($rec) + { + $this->Record = array(); + for (var $i = 0; $i < count($rec); $i++) { - $this->Record = array(); - for (var $i = 0; $i < count($rec); $i++) - { - $this->Record[$i] = $rec[$i]; - $o = mssql_fetch_field($i, $this->Query_ID); - $this->Record[$o->name] = $rec[$i]; - } - } - else - { - $this->Record = NULL; + $this->Record[$i] = $rec[$i]; + $o = mssql_fetch_field($i, $this->Query_ID); + $this->Record[$o->name] = $rec[$i]; } } else { $this->Record = NULL; } - - $stat = is_array($this->Record); - if (!$stat && $this->Auto_Free) - { - $this->free(); - } - - return $stat; } - - function transaction_begin() + else { - return $this->query('BEGIN TRAN'); + $this->Record = NULL; } - function transaction_commit() + $stat = is_array($this->Record); + if (!$stat && $this->Auto_Free) { - if (!$this->Errno) - { - return $this->query('COMMIT TRAN'); - } - - return False; + $this->free(); } - function transaction_abort() + return $stat; + } + + function transaction_begin() + { + return $this->query('BEGIN TRAN'); + } + + function transaction_commit() + { + if (!$this->Errno) { - return $this->query('ROLLBACK TRAN'); + return $this->query('COMMIT TRAN'); } - function seek($pos) + return False; + } + + function transaction_abort() + { + return $this->query('ROLLBACK TRAN'); + } + + function seek($pos) + { + mssql_data_seek($this->Query_ID,$pos); + $this->Row = $pos; + } + + function metadata($table) + { + $count = 0; + $id = 0; + $res = array(); + + $this->connect(); + $id = mssql_query("select * from $table", $this->Link_ID); + if (!$id) { - mssql_data_seek($this->Query_ID,$pos); - $this->Row = $pos; + $this->halt("Metadata query failed."); } - function metadata($table) + $count = mssql_num_fields($id); + + for ($i=0; $i<$count; $i++) { - $count = 0; - $id = 0; - $res = array(); - - $this->connect(); - $id = mssql_query("select * from $table", $this->Link_ID); - if (!$id) - { - $this->halt("Metadata query failed."); - } - - $count = mssql_num_fields($id); - - for ($i=0; $i<$count; $i++) - { - $info = mssql_fetch_field($id, $i); - $res[$i]["table"] = $table; - $res[$i]["name"] = $info["name"]; - $res[$i]["len"] = $info["max_length"]; - $res[$i]["flags"] = $info["numeric"]; - } - $this->free_result(); - return $res; + $info = mssql_fetch_field($id, $i); + $res[$i]["table"] = $table; + $res[$i]["name"] = $info["name"]; + $res[$i]["len"] = $info["max_length"]; + $res[$i]["flags"] = $info["numeric"]; } + $this->free_result(); + return $res; + } - function affected_rows() - { - return mssql_affected_rows($this->Query_ID); - } + function affected_rows() + { + return mssql_affected_rows($this->Query_ID); + } - function num_rows() - { - return mssql_num_rows($this->Query_ID); - } + function num_rows() + { + return mssql_num_rows($this->Query_ID); + } - function num_fields() - { - return mssql_num_fields($this->Query_ID); - } + function num_fields() + { + return mssql_num_fields($this->Query_ID); + } - function nf() - { - return $this->num_rows(); - } + function nf() + { + return $this->num_rows(); + } - function np() - { - print $this->num_rows(); - } + function np() + { + print $this->num_rows(); + } - function f($Field_Name) - { - return $this->Record[strtolower($Field_Name)]; - } + function f($Field_Name) + { + return $this->Record[strtolower($Field_Name)]; + } - function p($Field_Name) - { - print $this->f($Field_Name); - } + function p($Field_Name) + { + print $this->f($Field_Name); + } /* public: table locking */ - function get_last_insert_id($table, $field) - { + function get_last_insert_id($table, $field) + { /* This will get the last insert ID created on the current connection. Should only be called * after an insert query is run on a table that has an auto incrementing field. Of note, table * and field are required for pgsql compatiblity. MSSQL uses a query to retrieve the last * identity on the connection, so table and field are ignored here as well. */ - if (!isset($table) || $table == '' || !isset($field) || $field == '') - return -1; + if (!isset($table) || $table == '' || !isset($field) || $field == '') + return -1; - $result = @mssql_query("select @@identity", $this->Link_ID); - if (!$result) - return -1; + $result = @mssql_query("select @@identity", $this->Link_ID); + if (!$result) + return -1; - $Record = @mssql_fetch_row(0); - @mssql_free_result($result); - if (!is_array($Record)) /* no identity? */ - return -1; + $Record = @mssql_fetch_row(0); + @mssql_free_result($result); + if (!is_array($Record)) /* no identity? */ + return -1; - return $Record[0]; - } + return $Record[0]; + } - function lock($table, $mode="write") - { - return 1; // FIXME: fill it in! - } + function lock($table, $mode="write") + { + // /me really, really, really hates locks - transactions serve just fine + return $this->transaction_begin(); + } - function unlock() - { - return 1; // FIXME: fill it in! - } + function unlock() + { + return $this->transaction_commit(); + } /* private: error handling */ - function halt($msg, $line = '', $file = '') + function halt($msg, $line = '', $file = '') + { + global $phpgw; + $this->unlock(); + + $this->Errno = 1; + $this->Error = mssql_get_last_message(); + if ($this->Error == '') { - global $phpgw; - $this->unlock(); - - $this->Errno = 1; - $this->Error = mssql_get_last_message(); - if ($this->Error == '') - { - $this->Error = "General Error (The MS-SQL interface did not return a detailed error message)."; - } - - if ($this->Halt_On_Error == "no") - { - return; - } - - $this->haltmsg($msg); - - if ($file) - { - printf("
File: %s",$file); - } - - if ($line) - { - printf("
Line: %s",$line); - } - - if ($this->Halt_On_Error != "report") - { - echo "

Session halted."; - $phpgw->common->phpgw_exit(True); - } + $this->Error = "General Error (The MS-SQL interface did not return a detailed error message)."; } - function haltmsg($msg) + if ($this->Halt_On_Error == "no") { - printf("Database error: %s
\n", $msg); - if ($this->Errno != "0" && $this->Error != "()") - { - printf("MS-SQL Error: %s (%s)
\n", $this->Errno, $this->Error); - } + return; } - function table_names() + $this->haltmsg($msg); + + if ($file) { - $this->query("select name from sysobjects where type='u' and name != 'dtproperties'"); - $i = 0; - while ($info = @mssql_fetch_row($this->Query_ID)) - { - $return[$i]['table_name'] = $info[0]; - $return[$i]['tablespace_name'] = $this->Database; - $return[$i]['database'] = $this->Database; - $i++; - } - return $return; + printf("
File: %s",$file); + } + + if ($line) + { + printf("
Line: %s",$line); + } + + if ($this->Halt_On_Error != "report") + { + echo "

Session halted."; + $phpgw->common->phpgw_exit(True); } } + + function haltmsg($msg) + { + printf("Database error: %s
\n", $msg); + if ($this->Errno != "0" && $this->Error != "()") + { + printf("MS-SQL Error: %s (%s)
\n", $this->Errno, $this->Error); + } + } + + function table_names() + { + $this->query("select name from sysobjects where type='u' and name != 'dtproperties'"); + $i = 0; + while ($info = @mssql_fetch_row($this->Query_ID)) + { + $return[$i]['table_name'] = $info[0]; + $return[$i]['tablespace_name'] = $this->Database; + $return[$i]['database'] = $this->Database; + $i++; + } + return $return; + } +} ?>