📄 ct_sql.inc
字号:
<?php
##
## Copyright (c) 1998-2000 NetUSE AG
## Boris Erdmann, Kristian Koehntopp
##
## Copyright (c) 1998-2000 Sascha Schumann <sascha@schumann.cx>
##
## $Id: ct_sql.inc,v 1.1.1.1 2005/03/26 15:11:50 exsoft Exp $
##
## PHPLIB Data Storage Container using a SQL database
##
class CT_Sql {
##
## Define these parameters by overwriting or by
## deriving your own class from it (recommened)
##
var $database_table = "active_sessions";
var $database_class = "DB_Sql";
var $database_lock_semaphore = "";
var $encoding_mode = "base64";
## end of configuration
var $db;
function ac_start() {
$name = $this->database_class;
$this->db = new $name;
}
function ac_get_lock() {
if ( "" != $this->database_lock_semaphore ) {
$query = sprintf("SELECT get_lock('%s')", $this->database_lock_semaphore);
while ( ! $this->db->query($query)) {
$t = 1 + time(); while ( $t > time() ) { ; }
}
}
}
function ac_release_lock() {
if ( "" != $this->database_lock_semaphore ) {
$query = sprintf("SELECT release_lock('%s')", $this->database_lock_semaphore);
$this->db->query($query);
}
}
function ac_gc($gc_time, $name) {
$timeout = time();
$sqldate = date("YmdHis", $timeout - ($gc_time * 60));
$this->db->query(sprintf("DELETE FROM %s WHERE changed < '%s' AND name = '%s'",
$this->database_table,
$sqldate,
addslashes($name)));
}
function ac_store($id, $name, $str) {
$ret = true;
switch ( $this->encoding_mode ) {
case "slashes":
$str = addslashes($name . ":" . $str);
break;
case "base64":
default:
$str = base64_encode($name . ":" . $str);
};
$name = addslashes($name);
## update duration of visit
$now = date("YmdHis", time());
$uquery = sprintf("update %s set val='%s', changed='%s' where sid='%s' and name='%s'",
$this->database_table,
$str,
$now,
$id,
$name);
$squery = sprintf("select count(*) from %s where val='%s' and changed='%s' and sid='%s' and name='%s'",
$this->database_table,
$str,
$now,
$id,
$name);
$iquery = sprintf("insert into %s ( sid, name, val, changed ) values ('%s', '%s', '%s', '%s')",
$this->database_table,
$id,
$name,
$str,
$now);
$this->db->query($uquery);
# FIRST test to see if any rows were affected.
# Zero rows affected could mean either there were no matching rows
# whatsoever, OR that the update statement did match a row but made
# no changes to the table data (i.e. UPDATE tbl SET col = 'x', when
# "col" is _already_ set to 'x') so then,
# SECOND, query(SELECT...) on the sid to determine if the row is in
# fact there,
# THIRD, verify that there is at least one row present, and if there
# is not, then
# FOURTH, insert the row as we've determined that it does not exist.
if ( $this->db->affected_rows() == 0
&& $this->db->query($squery)
&& $this->db->next_record() && $this->db->f(0) == 0
&& !$this->db->query($iquery)) {
$ret = false;
}
return $ret;
}
function ac_delete($id, $name) {
$this->db->query(sprintf("delete from %s where name = '%s' and sid = '%s'",
$this->database_table,
addslashes($name),
$id));
}
function ac_get_value($id, $name) {
$this->db->query(sprintf("select val from %s where sid = '%s' and name = '%s'",
$this->database_table,
$id,
addslashes($name)));
if ($this->db->next_record()) {
$str = $this->db->f("val");
$str2 = base64_decode( $str );
if ( ereg("^".$name.":.*", $str2) ) {
$str = ereg_replace("^".$name.":", "", $str2 );
} else {
$str3 = stripslashes( $str );
if ( ereg("^".$name.":.*", $str3) ) {
$str = ereg_replace("^".$name.":", "", $str3 );
} else {
switch ( $this->encoding_mode ) {
case "slashes":
$str = stripslashes($str);
break;
case "base64":
default:
$str = base64_decode($str);
}
}
};
return $str;
};
return "";
}
function ac_newid($str, $name) {
return $str;
}
function ac_halt($s) {
$this->db->halt($s);
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -