blob: 5d2bdbce02caba04daf999ea6d5dd35935ae20dd [file] [log] [blame]
Andrey Andreev1ff49e02012-01-27 11:30:41 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreev1ff49e02012-01-27 11:30:41 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev1ff49e02012-01-27 11:30:41 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
25 * @filesource
26 */
27
Derek Allard2067d1a2008-11-13 22:59:24 +000028/**
29 * MySQLi Utility Class
30 *
31 * @category Database
Derek Jonesf4a4bd82011-10-20 12:18:42 -050032 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000033 * @link http://codeigniter.com/user_guide/database/
34 */
35class CI_DB_mysqli_utility extends CI_DB_utility {
Barry Mienydd671972010-10-04 16:33:58 +020036
Andrey Andreevb457a402012-04-09 16:11:56 +030037 protected $_list_databases = 'SHOW DATABASES';
38 protected $_optimize_table = 'OPTIMIZE TABLE %s';
39 protected $_repair_table = 'REPAIR TABLE %s';
Derek Allard2067d1a2008-11-13 22:59:24 +000040
41 /**
42 * MySQLi Export
43 *
Derek Allard2067d1a2008-11-13 22:59:24 +000044 * @param array Preferences
45 * @return mixed
46 */
Andrey Andreevb457a402012-04-09 16:11:56 +030047 protected function _backup($params = array())
Derek Allard2067d1a2008-11-13 22:59:24 +000048 {
Andrey Andreev782de112012-06-12 03:04:50 +030049 if (count($params) === 0)
50 {
51 return FALSE;
52 }
53
54 // Extract the prefs for simplicity
55 extract($params);
56
57 // Build the output
58 $output = '';
59 foreach ( (array) $tables as $table)
60 {
61 // Is the table in the "ignore" list?
62 if (in_array($table, (array) $ignore, TRUE))
63 {
64 continue;
65 }
66
67 // Get the table schema
68 $query = $this->db->query('SHOW CREATE TABLE '.$this->db->escape_identifiers($this->db->database.'.'.$table));
69
70 // No result means the table name was invalid
71 if ($query === FALSE)
72 {
73 continue;
74 }
75
76 // Write out the table schema
77 $output .= '#'.$newline.'# TABLE STRUCTURE FOR: '.$table.$newline.'#'.$newline.$newline;
78
79 if ($add_drop === TRUE)
80 {
81 $output .= 'DROP TABLE IF EXISTS '.$this->db->protect_identifiers($table).';'.$newline.$newline;
82 }
83
84 $i = 0;
85 $result = $query->result_array();
86 foreach ($result[0] as $val)
87 {
88 if ($i++ % 2)
89 {
90 $output .= $val.';'.$newline.$newline;
91 }
92 }
93
94 // If inserts are not needed we're done...
95 if ($add_insert === FALSE)
96 {
97 continue;
98 }
99
100 // Grab all the data from the current table
101 $query = $this->db->query('SELECT * FROM '.$this->db->protect_identifiers($table));
102
103 if ($query->num_rows() === 0)
104 {
105 continue;
106 }
107
108 // Fetch the field names and determine if the field is an
109 // integer type. We use this info to decide whether to
110 // surround the data with quotes or not
111
112 $i = 0;
113 $field_str = '';
114 $is_int = array();
115 while ($field = $query->result_id->fetch_field())
116 {
117 // Most versions of MySQL store timestamp as a string
118 $is_int[$i] = in_array(strtolower($field->type),
119 array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
120 TRUE);
121
122 // Create a string of field names
123 $field_str .= $this->db->escape_identifiers($field->name).', ';
124 $i++;
125 }
126
127 // Trim off the end comma
128 $field_str = preg_replace('/, $/' , '', $field_str);
129
130 // Build the insert string
131 foreach ($query->result_array() as $row)
132 {
133 $val_str = '';
134
135 $i = 0;
136 foreach ($row as $v)
137 {
138 // Is the value NULL?
139 if ($v === NULL)
140 {
141 $val_str .= 'NULL';
142 }
143 else
144 {
145 // Escape the data if it's not an integer
146 $val_str .= ($is_int[$i] === FALSE) ? $this->db->escape($v) : $v;
147 }
148
149 // Append a comma
150 $val_str .= ', ';
151 $i++;
152 }
153
154 // Remove the comma at the end of the string
155 $val_str = preg_replace('/, $/' , '', $val_str);
156
157 // Build the INSERT string
158 $output .= 'INSERT INTO '.$this->db->protect_identifiers($table).' ('.$field_str.') VALUES ('.$val_str.');'.$newline;
159 }
160
161 $output .= $newline.$newline;
162 }
163
164 return $output;
Derek Allard2067d1a2008-11-13 22:59:24 +0000165 }
Andrey Andreev782de112012-06-12 03:04:50 +0300166
Derek Allard2067d1a2008-11-13 22:59:24 +0000167}
168
169/* End of file mysqli_utility.php */
Timothy Warren9cc5c602012-03-19 18:36:37 -0400170/* Location: ./system/database/drivers/mysqli/mysqli_utility.php */