<?php
class
MsSQL
{
private
$dbhost
;
private
$dbuser
;
private
$dbpw
;
private
$dbname
;
private
$pconnect
;
private
$result
;
private
$querynum
= 0;
private
$connid
= 0;
private
$insertid
= 0;
private
$cursor
= 0;
public
static
$instance
= null;
public
function
__construct(
$db
)
{
function_exists(
"mssql_connect"
)
or
die
(
"<pre class="
brush:php;toolbar:false
">请先安装 MsSQL 扩展。"
);
$this
->dbhost = !
empty
(
$db
[
'hostname'
]) ?
$db
[
'hostname'
] :
'localhost'
;
$this
->dbuser =
$db
[
'username'
];
$this
->dbpw =
$db
[
'password'
];
$this
->dbname =
$db
[
'dbname'
];
$this
->pconnect = !
empty
(
$db
[
'pconnect'
]) ?
$db
[
'pconnect'
] : 0;
$this
->connect();
}
public
static
function
getdatabase(
$db
){
if
(
empty
(self::
$instance
)){
self::
$instance
=
new
MsSQL(
$db
);
}
return
self::
$instance
;
}
private
function
connect()
{
$func
=
$this
->pconnect == 1 ?
'mssql_pconnect'
:
'mssql_connect'
;
if
(!
$this
->connid = @
$func
(
$this
->dbhost,
$this
->dbuser,
$this
->dbpw)){
$this
->halt(
'Can not connect to MsSQL server'
);
}
if
(!
empty
(
$this
->dbname)){
if
(!
$this
->select_db(
$this
->dbname)){
$this
->halt(
'Cannot use database '
.
$this
->dbname);
}
}
return
$this
->connid;
}
public
function
select_db(
$dbname
)
{
return
@mssql_select_db(
$dbname
,
$this
->connid);
}
public
function
query_simple(
$sql
)
{
if
(
empty
(
$sql
)){
$this
->halt(
'SQL IS NULL!'
);
}
$result
= mssql_query(
$sql
,
$this
->connid);
if
(!
$result
){
$this
->halt(
'MsSQL Query Error'
,
$sql
);
}
$this
->result =
$result
;
return
$this
->result;
}
public
function
query(
$sql
)
{
$this
->querynum++;
$sql
= trim(
$sql
);
if
(preg_match(
"/^(select.*)limit ([0-9]+)(,([0-9]+))?$/i"
,
$sql
,
$matchs
)){
$sql
=
$matchs
[1];
$offset
=
$matchs
[2];
$pagesize
=
$matchs
[4];
$this
->result = mssql_query(
$sql
,
$this
->connid)
or
$this
->halt(
'MsSQL Query Error'
,
$sql
);
return
$this
->limit(
$this
->result,
$offset
,
$pagesize
);
}
elseif
(preg_match(
"/^insert into/i"
,
$sql
)){
$sql
=
"$sql; Select @@identity as insertid"
;
$this
->result = mssql_query(
$sql
,
$this
->connid)
or
$this
->halt(
'MsSQL Query Error'
,
$sql
);
$insid
=
$this
->fetch_row(
$this
->result);
$this
->insertid =
$insid
[0];
return
$this
->result;
}
else
{
$this
->result = mssql_query(
$sql
,
$this
->connid)
or
$this
->halt(
'MsSQL Query Error'
,
$sql
);
return
$this
->result;
}
}
public
function
find(
$sql
)
{
$this
->result =
$this
->query(
$sql
);
$args
=
$this
->fetch_array(
$this
->result);
return
$args
;
}
public
function
findAll(
$sql
,
$keyfield
=
''
)
{
$array
=
array
();
$this
->result =
$this
->query(
$sql
);
while
(
$r
=
$this
->fetch_array(
$this
->result)){
if
(
$keyfield
){
$key
=
$r
[
$keyfield
];
$array
[
$key
] =
$r
;
}
else
{
$array
[] =
$r
;
}
}
return
$array
;
}
public
function
fetch_array(
$query
,
$type
= MSSQL_ASSOC)
{
if
(
is_resource
(
$query
))
return
mssql_fetch_array(
$query
,
$type
);
if
(
$this
->cursor <
count
(
$query
)){
return
$query
[
$this
->cursor++];
}
return
FALSE;
}
public
function
affected_rows()
{
return
mssql_rows_affected(
$this
->connid);
}
public
function
num_rows(
$query
)
{
return
is_array
(
$query
) ?
count
(
$query
) : mssql_num_rows(
$query
);
}
public
function
num_fields(
$query
)
{
return
mssql_num_fields(
$query
);
}
public
function
get_result(
$query
,
$row
)
{
return
@mssql_result(
$query
,
$row
);
}
public
function
free_result(
$query
)
{
if
(
is_resource
(
$query
)) @mssql_free_result(
$query
);
}
public
function
insert_id()
{
return
$this
->insertid;
}
public
function
fetch_row(
$query
)
{
return
mssql_fetch_row(
$query
);
}
public
function
close()
{
return
mssql_close(
$this
->connid);
}
public
function
halt(
$message
=
''
,
$sql
=
''
)
{
$_sql
= !
empty
(
$sql
) ?
"MsSQL Query:$sql <br>"
:
''
;
exit
(
"<pre class="
brush:php;toolbar:false
">{$_sql}Message:$message"
);
}
public
function
limit(
$query
,
$offset
,
$pagesize
= 0)
{
if
(
$pagesize
> 0){
mssql_data_seek(
$query
,
$offset
);
}
else
{
$pagesize
=
$offset
;
}
$info
=
array
();
for
(
$i
= 0;
$i
<
$pagesize
;
$i
++){
$r
=
$this
->fetch_array(
$query
);
if
(!
$r
)
break
;
$info
[] =
$r
;
}
$this
->cursor = 0;
return
$info
;
}
public
function
init_pro(
$proNme
)
{
return
mssql_init(
$proNme
,
$this
->connid);
}
public
function
begin()
{
$this
->query(
'begin tran'
);
}
public
function
commit()
{
$this
->query(
'commit tran'
);
}
public
function
rollback()
{
$this
->query(
'rollback tran'
);
}
public
function
__destruct()
{
if
(!
is_resource
(
$this
->connid)){
return
;
}
$this
->free_result(
$this
->result);
$this
->close();
}
}