210 行
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			210 行
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * CodeIgniter
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * An open source application development framework for PHP 5.1.6 or newer
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package		CodeIgniter
							 | 
						||
| 
								 | 
							
								 * @author		ExpressionEngine Dev Team
							 | 
						||
| 
								 | 
							
								 * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc.
							 | 
						||
| 
								 | 
							
								 * @license		http://codeigniter.com/user_guide/license.html
							 | 
						||
| 
								 | 
							
								 * @link		http://codeigniter.com
							 | 
						||
| 
								 | 
							
								 * @since		Version 1.0
							 | 
						||
| 
								 | 
							
								 * @filesource
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * MySQL Utility Class
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @category	Database
							 | 
						||
| 
								 | 
							
								 * @author		ExpressionEngine Dev Team
							 | 
						||
| 
								 | 
							
								 * @link		http://codeigniter.com/user_guide/database/
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class CI_DB_mysql_utility extends CI_DB_utility {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * List databases
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @access	private
							 | 
						||
| 
								 | 
							
									 * @return	bool
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									function _list_databases()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return "SHOW DATABASES";
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// --------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Optimize table query
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * Generates a platform-specific query so that a table can be optimized
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @access	private
							 | 
						||
| 
								 | 
							
									 * @param	string	the table name
							 | 
						||
| 
								 | 
							
									 * @return	object
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									function _optimize_table($table)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return "OPTIMIZE TABLE ".$this->db->_escape_identifiers($table);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// --------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Repair table query
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * Generates a platform-specific query so that a table can be repaired
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @access	private
							 | 
						||
| 
								 | 
							
									 * @param	string	the table name
							 | 
						||
| 
								 | 
							
									 * @return	object
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									function _repair_table($table)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return "REPAIR TABLE ".$this->db->_escape_identifiers($table);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// --------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * MySQL Export
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @access	private
							 | 
						||
| 
								 | 
							
									 * @param	array	Preferences
							 | 
						||
| 
								 | 
							
									 * @return	mixed
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									function _backup($params = array())
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (count($params) == 0)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											return FALSE;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Extract the prefs for simplicity
							 | 
						||
| 
								 | 
							
										extract($params);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Build the output
							 | 
						||
| 
								 | 
							
										$output = '';
							 | 
						||
| 
								 | 
							
										foreach ((array)$tables as $table)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Is the table in the "ignore" list?
							 | 
						||
| 
								 | 
							
											if (in_array($table, (array)$ignore, TRUE))
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												continue;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Get the table schema
							 | 
						||
| 
								 | 
							
											$query = $this->db->query("SHOW CREATE TABLE `".$this->db->database.'`.'.$table);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// No result means the table name was invalid
							 | 
						||
| 
								 | 
							
											if ($query === FALSE)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												continue;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Write out the table schema
							 | 
						||
| 
								 | 
							
											$output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if ($add_drop == TRUE)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												$output .= 'DROP TABLE IF EXISTS '.$table.';'.$newline.$newline;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											$i = 0;
							 | 
						||
| 
								 | 
							
											$result = $query->result_array();
							 | 
						||
| 
								 | 
							
											foreach ($result[0] as $val)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												if ($i++ % 2)
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													$output .= $val.';'.$newline.$newline;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// If inserts are not needed we're done...
							 | 
						||
| 
								 | 
							
											if ($add_insert == FALSE)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												continue;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Grab all the data from the current table
							 | 
						||
| 
								 | 
							
											$query = $this->db->query("SELECT * FROM $table");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if ($query->num_rows() == 0)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												continue;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Fetch the field names and determine if the field is an
							 | 
						||
| 
								 | 
							
											// integer type.  We use this info to decide whether to
							 | 
						||
| 
								 | 
							
											// surround the data with quotes or not
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											$i = 0;
							 | 
						||
| 
								 | 
							
											$field_str = '';
							 | 
						||
| 
								 | 
							
											$is_int = array();
							 | 
						||
| 
								 | 
							
											while ($field = mysql_fetch_field($query->result_id))
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												// Most versions of MySQL store timestamp as a string
							 | 
						||
| 
								 | 
							
												$is_int[$i] = (in_array(
							 | 
						||
| 
								 | 
							
																		strtolower(mysql_field_type($query->result_id, $i)),
							 | 
						||
| 
								 | 
							
																		array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
							 | 
						||
| 
								 | 
							
																		TRUE)
							 | 
						||
| 
								 | 
							
																		) ? TRUE : FALSE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												// Create a string of field names
							 | 
						||
| 
								 | 
							
												$field_str .= '`'.$field->name.'`, ';
							 | 
						||
| 
								 | 
							
												$i++;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Trim off the end comma
							 | 
						||
| 
								 | 
							
											$field_str = preg_replace( "/, $/" , "" , $field_str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Build the insert string
							 | 
						||
| 
								 | 
							
											foreach ($query->result_array() as $row)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												$val_str = '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												$i = 0;
							 | 
						||
| 
								 | 
							
												foreach ($row as $v)
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													// Is the value NULL?
							 | 
						||
| 
								 | 
							
													if ($v === NULL)
							 | 
						||
| 
								 | 
							
													{
							 | 
						||
| 
								 | 
							
														$val_str .= 'NULL';
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													else
							 | 
						||
| 
								 | 
							
													{
							 | 
						||
| 
								 | 
							
														// Escape the data if it's not an integer
							 | 
						||
| 
								 | 
							
														if ($is_int[$i] == FALSE)
							 | 
						||
| 
								 | 
							
														{
							 | 
						||
| 
								 | 
							
															$val_str .= $this->db->escape($v);
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
														else
							 | 
						||
| 
								 | 
							
														{
							 | 
						||
| 
								 | 
							
															$val_str .= $v;
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Append a comma
							 | 
						||
| 
								 | 
							
													$val_str .= ', ';
							 | 
						||
| 
								 | 
							
													$i++;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												// Remove the comma at the end of the string
							 | 
						||
| 
								 | 
							
												$val_str = preg_replace( "/, $/" , "" , $val_str);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
												// Build the INSERT string
							 | 
						||
| 
								 | 
							
												$output .= 'INSERT INTO '.$table.' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											$output .= $newline.$newline;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return $output;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* End of file mysql_utility.php */
							 | 
						||
| 
								 | 
							
								/* Location: ./system/database/drivers/mysql/mysql_utility.php */
							 |