<?php
// WordPress DB Class
// ========================
// fix by 21Andy.com at 2008-03-16
// Andy Tse (andy@21andy.com)
//http://www.21andy.com
// ========================
// ORIGINAL CODE FROM:
// Justin Vincent (justin@visunet.ie)
// http://php.justinvincent.com
define('EZSQL_VERSION','WP1.25');
define('OBJECT','OBJECT',true);
define('ARRAY_A','ARRAY_A',false);
define('ARRAY_N','ARRAY_N',false);
if(!defined('SAVEQUERIES'))
define('SAVEQUERIES',false);
classwpdb{
var$show_errors=false;
var$num_queries=0;
var$last_query;
var$col_info;
var$queries;
var$ready=false;
// Our tables
var$posts;
var$users;
var$categories;
var$post2cat;
var$comments;
var$links;
var$options;
var$optiontypes;
var$optionvalues;
var$optiongroups;
var$optiongroup_options;
var$postmeta;
var$usermeta;
var$terms;
var$term_taxonomy;
var$term_relationships;
var$charset;
var$collate;
/**
* Connects to the database server and selects a database
*@paramstring $dbuser
*@paramstring $dbpassword
*@paramstring $dbname
*@paramstring $dbhost
*/
functionwpdb(){
return$this->__construct();
}
function__construct(){
register_shutdown_function(array(&$this,"__destruct"));
if(defined('WP_DEBUG')andWP_DEBUG==true)
$this->show_errors();
if(defined('DB_CHARSET'))
$this->charset=DB_CHARSET;
if(defined('DB_COLLATE'))
$this->collate=DB_COLLATE;
if(!defined('DB_USER')||
!defined('DB_PASSWORD')||
!defined('DB_NAME')||
!defined('DB_HOST'))
exit('please config DB setting!!!');
$this->dbuser=DB_USER;
$this->dbpassword=DB_PASSWORD;
$this->dbname=DB_NAME;
$this->dbhost=DB_HOST;
$this->connect();
}
functionconnect(){
$this->dbh= @mysql_connect($this->dbhost,$this->dbuser,$this->dbpassword);
if(!$this->dbh){
$this->bail("
<h1>Error establishing a database connection</h1>
<p>This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>$dbhost</code>. This could mean your host's database server is down.</p>
<ul>
<li>Are you sure you have the correct username and password?</li>
<li>Are you sure that you have typed the correct hostname?</li>
<li>Are you sure that the database server is running?</li>
</ul>
<p>If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>
");
return;
}
$this->ready=true;
if(!empty($this->charset)&&version_compare(mysql_get_server_info(),'4.1.0','>='))
$this->query("SET NAMES '$this->charset'");
$this->select($this->dbname);
}
functioncheck_conn(){
if(!mysql_ping($this->dbh)){
//here is the major trick, you have to close the connection (even though its not currently working) for it to recreate properly.
mysql_close($this->dbh);
$this->connect();
}
}
function__destruct(){
returntrue;
}
/**
* Selects a database using the current class's $this->dbh
*@paramstring $db name
*/
functionselect($db){
if(!@mysql_select_db($db,$this->dbh)){
$this->ready=false;
$this->bail("
<h1>Can’t select database</h1>
<p>We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>$db</code> database.</p>
<ul>
<li>Are you sure it exists?</li>
<li>Does the user <code>".DB_USER."</code> have permission to use the <code>$db</code> database?</li>
<li>On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?</li>
</ul>
<p>If you don't know how to setup a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.</p>");
return;
}
}
/**
* Escapes content for insertion into the database, for security
*
*@paramstring $string
*@returnstring query safe string
*/
functionescape($string){
returnaddslashes($string);// Disable rest for now, causing problems
if(!$this->dbh||version_compare(phpversion(),'4.3.0')=='-1')
returnmysql_escape_string($string);
else
returnmysql_real_escape_string($string,$this->dbh);
}
/**
* Escapes content by reference for insertion into the database, for security
*@paramstring $s
*/
functionescape_by_ref(&$s){
$s=$this->escape($s);
}
/**
* Prepares a SQL query for safe use, using sprintf() syntax
*/
functionprepare($args=NULL){
if(NULL===$args)
return;
$args=func_get_args();
$query=array_shift($args);
$query=str_replace("'%s'",'%s',$query);// in case someone mistakenly already singlequoted it
$query=str_replace('"%s"','%s',$query);// doublequote unquoting
$query=str_replace('%s',"'%s'",$query);// quote the strings
array_walk($args,array(&$this,'escape_by_ref'));
return@vsprintf($query,$args);
}
// ==================================================================
// Print SQL/DB error.
functionprint_error($str=''){
global$EZSQL_ERROR;
if(!$str)$str=mysql_error($this->dbh);
$EZSQL_ERROR[]=
array('query'=>$this->last_query,'error_str'=>$str);
$error_str="WordPress database error$strfor query$this->last_query";
error_log($error_str,0);
// Is error output turned on or not..
if(!$this->show_errors)
returnfalse;
$str=htmlspecialchars($str,ENT_QUOTES);
$query=htmlspecialchars($this->last_query,ENT_QUOTES);
// If there is an error then take note of it
print"<div id='error'>
<p class='wpdberror'><strong>WordPress database error:</strong> [$str]<br />
<code>$query</code></p>
</div>";
}
// ==================================================================
// Turn error handling on or off..
functionshow_errors($show=true){
$errors=$this->show_errors;
$this->show_errors=$show;
return$errors;
}
functionhide_errors(){
$show=$this->show_errors;
$this->show_errors=false;
return$show;
}
// ==================================================================
// Kill cached query results
functionflush(){
$this->last_result=array();
$this->col_info=null;
$this->last_query=null;
}
// ==================================================================
// Basic Query - see docs for more detail
functionquery($query){
if(!$this->ready)
returnfalse;
// filter the query, if filters are available
//NOTE:some queries are made before the plugins have been loaded, and thus cannot be filtered with this method
if(function_exists('apply_filters'))
$query=apply_filters('query',$query);
// initialise return
$return_val=0;
$this->flush();
// Log how the function was called
$this->func_call="\$db->query(\"$query\")";
// Keep track of the last query for debug..
$this->last_query=$query;
// Perform the query via std mysql_query function..
if(SAVEQUERIES)
$this->timer_start();
$this->result= @mysql_query($query,$this->dbh);
++$this->num_queries;
if(SAVEQUERIES)
$this->queries[]=array($query,$this->timer_stop());
// If there is an error then take note of it..
if(mysql_error($this->dbh)){
$this->print_error();
returnfalse;
}
if(preg_match("/^\\s*(insert|delete|update|replace) /i",$query)){
$this->rows_affected=mysql_affected_rows($this->dbh);
// Take note of the insert_id
if(preg_match("/^\\s*(insert|replace) /i",$query)){
$this->insert_id=mysql_insert_id($this->dbh);
}
// Return number of rows affected
$return_val=$this->rows_affected;
}else{
$i=0;
while($i< @mysql_num_fields($this->result)){
$this->col_info[$i]= @mysql_fetch_field($this->result);
$i++;
}
$num_rows=0;
while($row= @mysql_fetch_object($this->result)){
$this->last_result[$num_rows]=$row;
$num_rows++;
}
@mysql_free_result($this->result);
// Log number of rows the query returned
$this->num_rows=$num_rows;
// Return number of rows selected
$return_val=$this->num_rows;
}
return$return_val;
}
/**
* Get one variable from the database
*@paramstring $query (can be null as well, for caching, see codex)
*@paramint $x = 0 row num to return
*@paramint $y = 0 col num to return
*@returnmixed results
*/
functionget_var($query=null,$x=0,$y=0){
$this->func_call="\$db->get_var(\"$query\",$x,$y)";
if($query)
$this->query($query);
// Extract var out of cached results based x,y vals
if($this->last_result[$y]){
$values=array_values(get_object_vars($this->last_result[$y]));
}
// If there is a value return it else return null
return(isset($values[$x])&&$values[$x]!=='')?$values[$x]:null;
}
/**
* Get one row from the database
*@paramstring $query
*@paramstring $output ARRAY_A | ARRAY_N | OBJECT
*@paramint $y row num to return
*@returnmixed results
*/
functionget_row($query=null,$output=OBJECT,$y=0){
$this->func_call="\$db->get_row(\"$query\",$output,$y)";
if($query)
$this->query($query);
else
returnnull;
if(!isset($this->last_result[$y]))
returnnull;
if($output==OBJECT){
return$this->last_result[$y]?$this->last_result[$y]:null;
}elseif($output==ARRAY_A){
return$this->last_result[$y]?get_object_vars($this->last_result[$y]):null;
}elseif($output==ARRAY_N){
return$this->last_result[$y]?array_values(get_object_vars($this->last_result[$y])):null;
}else{
$this->print_error("\$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
}
}
/**
* Gets one column from the database
*@paramstring $query (can be null as well, for caching, see codex)
*@paramint $x col num to return
*@returnarray results
*/
functionget_col($query=null,$x=0){
if($query)
$this->query($query);
$new_array=array();
// Extract the column values
for($i=0;$i<count($this->last_result);$i++){
$new_array[$i]=$this->get_var(null,$x,$i);
}
return$new_array;
}
/**
* Return an entire result set from the database
*@paramstring $query (can also be null to pull from the cache)
*@paramstring $output ARRAY_A | ARRAY_N | OBJECT
*@returnmixed results
*/
functionget_results($query=null,$output=OBJECT){
$this->func_call="\$db->get_results(\"$query\",$output)";
if($query)
$this->query($query);
else
returnnull;
// Send back array of objects. Each row is an object
if($output==OBJECT){
return$this->last_result;
}elseif($output==ARRAY_A||$output==ARRAY_N){
if($this->last_result){
$i=0;
foreach($this->last_resultas$row){
$new_array[$i]=(array)$row;
if($output==ARRAY_N){
$new_array[$i]=array_values($new_array[$i]);
}
$i++;
}
return$new_array;
}else{
returnnull;
}
}
}
/**
* Grabs column metadata from the last query
*@paramstring $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill
*@paramint $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type
*@returnmixed results
*/
functionget_col_info($info_type='name',$col_offset= -1){
if($this->col_info){
if($col_offset== -1){
$i=0;
foreach($this->col_infoas$col){
$new_array[$i]=$col->{$info_type};
$i++;
}
return$new_array;
}else{
return$this->col_info[$col_offset]->{$info_type};
}
}
}
/**
* Starts the timer, for debugging purposes
*/
functiontimer_start(){
$mtime=microtime();
$mtime=explode('',$mtime);
$this->time_start=$mtime[1]+$mtime[0];
returntrue;
}
/**
* Stops the debugging timer
*@returnint total time spent on the query, in milliseconds
*/
functiontimer_stop(){
$mtime=microtime();
$mtime=explode('',$mtime);
$time_end=$mtime[1]+$mtime[0];
$time_total=$time_end-$this->time_start;
return$time_total;
}
/**
* Wraps fatal errors in a nice header and footer and dies.
*@paramstring $message
*/
functionbail($message){// Just wraps errors in a nice header and footer
if(!$this->show_errors){
if(class_exists('WP_Error'))
$this->error=newWP_Error('500',$message);
else
$this->error=$message;
returnfalse;
}
wp_die($message);
}
}
if(!isset($wpdb))
$wpdb=newwpdb;
?>
相关推荐
"MySQL server has gone away 问题的解决方法" MySQL server has gone away 是一个常见的 MySQL 错误提示,出现这种错误的原因可能是多种多样的,今天我们将从不同的角度来讨论这个问题,并提供一些实用的解决方法...
总的来说,解决MySQL Server has gone away错误需要理解错误背后的机制,并针对性地调整配置、优化代码或采用更适合的数据库操作策略。通过以上方法,你可以有效地避免或解决这类问题,确保数据库连接的稳定性和可靠...
MySQL导入sql脚本错误:2006 – MySQL server has gone away 到如一些小脚本很少报错,但最近导入一个10+M的SQL脚本,却重复报错: Error occured at:2014-03-24 11:42:24 Line no.:85 Error Code: 2006 - MySQL ...
在我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功。该项的作用是限制mysql服务端接收到的包...
在 Gearman 中,worker 运行在常驻后台模式,可能会遇到一个问题,即与 MySQL 数据库的连接在处理任务过程中因“MySQL server has gone away”而中断。这通常是由于多种原因造成的,包括 MySQL 服务宕机、超时、请求...
MYSQL server has gone away 引起这个原因是不可怕的.原因是更改了系统的断开时间. mysql>show gloable variables like “%timeout%”; 进行查看 interactive_timeout 的黓认值为28800 wait_timeout 的默认值这:...
错误现象 无法连接到 .。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, ...
在IT领域,尤其是在数据库管理与优化方面,对MySQL进行精细调节和优化是提升系统性能、保障数据处理效率的关键。以下是对“101个MySQL的调节和优化方法”这一主题的深入解析,涵盖从硬件配置到软件参数设置,以及...
然而,如果将其设置的太小,可能会遭遇到“MySQL has gone away” 之类的问题。 show variables 命令的误解 在使用 show variables 命令时,需要注意的是,这个命令实际上是查询的是会话变量,而不是全局变量。这...
反之,如果设置的过小,可能会遭遇到“MySQL has gone away”之类的问题。 wait_timeout 参数的设置非常重要,因为它直接影响着 MySQL 的性能和稳定性。如果设置的不当,可能会导致连接超时、连接断开、甚至影响到...
本文将详细讨论两个常见的错误:“MySQL server has gone away”和“Can't connect to [local] MySQL server”。 首先,让我们关注“MySQL server has gone away”错误。这个错误通常意味着服务器在执行查询时超时...
Apache一起使用 MySQL 18 问题和常见的错误 18.1 如果 MySQL总是崩溃怎么办 18.2 使用 MySQL 时一些常见错误 18.2.1 MySQL server has gone away错误 18.2.2 Can't connect to [local] MySQL ...
若导入时报错,ERROR 2006 (HY000):MySQL server has gone away 。我们可以通过语句查看一下允许的最大包大小:show global variables like 'max_allowed_packet'; MySQL使用最大数据包站站点进行服务器和客户端...
Qt5.4下连接Mysql,QSqlDatabase: QMYSQL driver not loaded but available-附件资源