![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
Call to a member function query() on a non-object 我的以下程序出现这个错误,请问高手是何故?
<?
$host="localhost";
$user="root";
$pwd="123456";
$db="dbtest";
$tables = array('ad','admin','cate','config','links','menu','message','news','product','users'); //定义要保存的数据表,一个数组
$prefix = 'tb_'; // 要保存的.sql文件的前缀
$saveto = 'server'; // 要保存到什么地方,是本地还是服务器上,默认是服务器
$back_mode = 'all'; // 要保存的方式,是全部备份还是只保存数据库结构
$admin = 'xx'; // 管理员名称
$admin_email = 'ee@126.com'; // 管理员邮箱
// 定义数据保存的文件名
$local_filename = $prefix.date('Ymd_His').'.sql"';
if (!$filename) { $filename = $db_backup_path . $prefix .date('Ymd_His_'). create_check_code(4) . ".sql"; }
$filename = $prefix.date(Ymd_His). create_check_code(6).".sql"; // 保存在服务器上的文件名
// 获取数据库结构和数据内容
foreach($tables as $table)
{
if ($back_mode == 'all') { $sqldump .= backdatebasestruc($table); }
if ($back_mode == 'table') { $sqldump .= backdatebaseall($table); }
}
// 如果数据内容不是空就开始保存
if(trim($sqldump))
{
// 写入开头信息
$sqldump =
"# --------------------------------------------------------\n".
"# 数据表备份\n".
"#\n".
"# 服务器: $db->Host\n".
"# 数据库:$db->Database\n".
"# 备份编号: ". create_sess_id() ."\n". // 这里有一个生成session id的函数
"# 备份时间: ".time_to_date('',6)."\n". // 这里就是获取当前时间的函数
"#\n".
"# 管理员:$admin ($admin_email)\n". // 管理员的用户名和邮箱地址
"# $copyright\n".
"# --------------------------------------------------------\n\n\n".
$sqldump;
// 保存到本地
if($saveto == "local")
{
ob_end_clean();
header('Content-Encoding: none');
header('Content-Type: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));
header('Content-Disposition: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ').'filename="'.$local_filename);
header('Content-Length: '.strlen($sqldump));
header('Pragma: no-cache');
header('Expires: 0');
echo $sqldump;
}
// 保存到本地结束
// 保存在服务器
if($saveto == "server")
{
if($filename != "")
{
@$fp = fopen($filename, "w+");
if ($fp)
{
@flock($fp, 3);
if(@!fwrite($fp, $sqldump))
{
@fclose($fp);
exit_msg("数据文件无法保存到服务器,请检查目录属性你是否有写的权限。");
}
else
{
exit_msg("数据成功备份至服务器 $filename 中。");
}
}
else
{
exit_msg("无法打开你指定的目录".$filename .",请确定该目录是否存在,或者是否有相应权限");
}
}
else
{
exit_msg("您没有输入备份文件名,请返回修改。");
}
}
// 保存到服务器结束
}
else
{
exit_msg("数据表没有任何内容");
}
/* 备份数据库结束 */
function create_check_code($len=4)
{
if(!is_numeric($len) || ($len>6) || ($len<1)) { return; }
$check_code = substr(create_sess_id(), 16, $len );
return strtoupper($check_code);
}
function create_sess_id($len=32)
{
// 校验提交的长度是否合法
if( !is_numeric($len) || ($len>32) || ($len<16)) { return; }
// 获取当前时间的微秒
list($u, $s) = explode(' ', microtime());
$time = (float)$u + (float)$s;
// 产生一个随机数
$rand_num = rand(100000, 999999);
$rand_num = rand($rand_num, $time);
mt_srand($rand_num);
$rand_num = mt_rand();
// 产生SessionID
$sess_id = md5( md5($time). md5($rand_num) );
// 截取指定需要长度的SessionID
$sess_id = substr($sess_id, 0, $len);
return $sess_id;
}
function backdatebasestruc($table) //备份数据库结构
{
global $db;
$tabledump = "DROP TABLE IF EXISTS $table;\n";
$createtable = $db->query("SHOW CREATE TABLE $table");
$create = $db->fetch_row($createtable);
$tabledump .= $create[1].";\n\n";
return $tabledump;
}
//db 类
class db {
var $querynum = 0;
var $link;
function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0) {
if($pconnect) {
if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$this->halt('Can not connect to MySQL server');
}
} else {
if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw)) {
$this->halt('Can not connect to MySQL server');
}
}
if($this->version() > '4.1') {
global $charset, $dbcharset;
if(!$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8'))) {
$dbcharset = str_replace('-', '', $charset);
}
if($dbcharset) {
mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
}
if($this->version() > '5.0.1') {
mysql_query("SET sql_mode=''", $this->link);
}
}
if($dbname) {
mysql_select_db($dbname, $this->link);
}
}
function select_db($dbname) {
return mysql_select_db($dbname, $this->link);
}
function fetch_array($query, $result_type = MYSQL_ASSOC) {
return mysql_fetch_array($query, $result_type);
}
function query($sql, $type = '') {
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;
$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
'mysql_unbuffered_query' : 'mysql_query';
if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
$this->halt('MySQL Query Error', $sql);
}
$this->querynum++;
return $query;
}
function affected_rows() {
return mysql_affected_rows($this->link);
}
function error() {
return (($this->link) ? mysql_error($this->link) : mysql_error());
}
function errno() {
return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
}
function result($query, $row) {
$query = @mysql_result($query, $row);
return $query;
}
function num_rows($query) {
$query = mysql_num_rows($query);
return $query;
}
function num_fields($query) {
return mysql_num_fields($query);
}
function free_result($query) {
return mysql_free_result($query);
}
function insert_id() {
return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
}
function fetch_row($query) {
$query = mysql_fetch_row($query);
return $query;
}
function fetch_fields($query) {
return mysql_fetch_field($query);
}
function version() {
return mysql_get_server_info($this->link);
}
function close() {
return mysql_close($this->link);
}
function halt($message = '', $sql = '') {
define('CACHE_FORBIDDEN', TRUE);
require_once 'db_mysql_error.inc.php';
}
}
?>

