Documentation TYPO3 par Ameos |
00001 <?php 00002 /* $Id: mysql.dbi.lib.php,v 2.37 2005/03/24 20:57:00 rabus Exp $ */ 00003 // vim: expandtab sw=4 ts=4 sts=4: 00004 00012 if (!@function_exists('mysql_connect')) { 00013 PMA_dl('mysql'); 00014 } 00015 00016 // check whether mysql is available 00017 if (!@function_exists('mysql_connect')) { 00018 require_once('./libraries/header_http.inc.php'); 00019 echo sprintf($strCantLoad, 'mysql') . '<br />' . "\n" 00020 . '<a href="./Documentation.html#faqmysql" target="documentation">' . $GLOBALS['strDocu'] . '</a>' . "\n"; 00021 exit; 00022 } 00023 00024 // MySQL client API 00025 if (!defined('PMA_MYSQL_CLIENT_API')) { 00026 if (function_exists('mysql_get_client_info')) { 00027 $client_api = explode('.', mysql_get_client_info()); 00028 define('PMA_MYSQL_CLIENT_API', (int)sprintf('%d%02d%02d', $client_api[0], $client_api[1], intval($client_api[2]))); 00029 unset($client_api); 00030 } else { 00031 define('PMA_MYSQL_CLIENT_API', 32332); // always expect the worst... 00032 } 00033 } 00034 00035 function PMA_DBI_connect($user, $password, $is_controluser = FALSE) { 00036 global $cfg, $php_errormsg; 00037 00038 $server_port = (empty($cfg['Server']['port'])) 00039 ? '' 00040 : ':' . $cfg['Server']['port']; 00041 00042 if (strtolower($cfg['Server']['connect_type']) == 'tcp') { 00043 $cfg['Server']['socket'] = ''; 00044 } 00045 00046 $server_socket = (empty($cfg['Server']['socket'])) 00047 ? '' 00048 : ':' . $cfg['Server']['socket']; 00049 00050 if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) { 00051 $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0; 00052 // always use CLIENT_LOCAL_FILES as defined in mysql_com.h 00053 // for the case where the client library was not compiled 00054 // with --enable-local-infile 00055 $client_flags |= 128; 00056 } 00057 00058 if (empty($client_flags)) { 00059 $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect'; 00060 $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password); 00061 } else { 00062 if ($cfg['PersistentConnections']) { 00063 $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags); 00064 } else { 00065 $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags); 00066 } 00067 } 00068 00069 if (empty($link)) { 00070 PMA_auth_fails(); 00071 } // end if 00072 00073 PMA_DBI_postConnect($link, $is_controluser); 00074 00075 return $link; 00076 } 00077 00078 function PMA_DBI_select_db($dbname, $link = NULL) { 00079 if (empty($link)) { 00080 if (isset($GLOBALS['userlink'])) { 00081 $link = $GLOBALS['userlink']; 00082 } else { 00083 return FALSE; 00084 } 00085 } 00086 if (PMA_MYSQL_INT_VERSION < 40100) { 00087 $dbname = PMA_convert_charset($dbname); 00088 } 00089 return mysql_select_db($dbname, $link); 00090 } 00091 00092 function PMA_DBI_try_query($query, $link = NULL, $options = 0) { 00093 if (empty($link)) { 00094 if (isset($GLOBALS['userlink'])) { 00095 $link = $GLOBALS['userlink']; 00096 } else { 00097 return FALSE; 00098 } 00099 } 00100 if (defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION < 40100) { 00101 $query = PMA_convert_charset($query); 00102 } 00103 if ($options == ($options | PMA_DBI_QUERY_STORE)) { 00104 return @mysql_query($query, $link); 00105 } elseif ($options == ($options | PMA_DBI_QUERY_UNBUFFERED)) { 00106 return @mysql_unbuffered_query($query, $link); 00107 } else { 00108 return @mysql_query($query, $link); 00109 } 00110 } 00111 00112 // The following function is meant for internal use only. 00113 // Do not call it from outside this library! 00114 function PMA_mysql_fetch_array($result, $type = FALSE) { 00115 global $cfg, $allow_recoding, $charset, $convcharset; 00116 00117 if ($type != FALSE) { 00118 $data = mysql_fetch_array($result, $type); 00119 } else { 00120 $data = mysql_fetch_array($result); 00121 } 00122 00123 /* No data returned => do not touch it */ 00124 if (! $data) return $data; 00125 00126 if (!defined('PMA_MYSQL_INT_VERSION') || PMA_MYSQL_INT_VERSION >= 40100 00127 || !(isset($cfg['AllowAnywhereRecoding']) && $cfg['AllowAnywhereRecoding'] && $allow_recoding)) { 00128 /* No recoding -> return data as we got them */ 00129 return $data; 00130 } else { 00131 $ret = array(); 00132 $num = mysql_num_fields($result); 00133 $i = 0; 00134 for ($i = 0; $i < $num; $i++) { 00135 $name = mysql_field_name($result, $i); 00136 $flags = mysql_field_flags($result, $i); 00137 /* Field is BINARY (either marked manually, or it is BLOB) => do not convert it */ 00138 if (stristr($flags, 'BINARY')) { 00139 if (isset($data[$i])) $ret[$i] = $data[$i]; 00140 if (isset($data[$name])) $ret[PMA_convert_display_charset($name)] = $data[$name]; 00141 } else { 00142 if (isset($data[$i])) $ret[$i] = PMA_convert_display_charset($data[$i]); 00143 if (isset($data[$name])) $ret[PMA_convert_display_charset($name)] = PMA_convert_display_charset($data[$name]); 00144 } 00145 } 00146 return $ret; 00147 } 00148 } 00149 00150 function PMA_DBI_fetch_array($result) { 00151 return PMA_mysql_fetch_array($result); 00152 } 00153 00154 function PMA_DBI_fetch_assoc($result) { 00155 return PMA_mysql_fetch_array($result, MYSQL_ASSOC); 00156 } 00157 00158 function PMA_DBI_fetch_row($result) { 00159 return PMA_mysql_fetch_array($result, MYSQL_NUM); 00160 } 00161 00162 function PMA_DBI_free_result($result) { 00163 if (!is_bool($result)) { 00164 return mysql_free_result($result); 00165 } else { 00166 return 0; 00167 } 00168 } 00169 00170 function PMA_DBI_getError($link = NULL) { 00171 unset($GLOBALS['errno']); 00172 if (empty($link)) { 00173 if (isset($GLOBALS['userlink'])) { 00174 $link = $GLOBALS['userlink']; 00175 00176 // Do not stop now. On the initial connection, we don't have a $link, 00177 // we don't have a $GLOBALS['userlink'], but we can catch the error code 00178 // } else { 00179 // return FALSE; 00180 } 00181 } 00182 00183 if (mysql_errno()) { 00184 $error = mysql_errno(); 00185 $error_message = mysql_error(); 00186 } elseif ($link) { 00187 $error = mysql_errno($link); 00188 $error_message = mysql_error($link); 00189 } 00190 00191 // keep the error number for further check after the call to PMA_DBI_getError() 00192 if (isset($error) && $error) { 00193 $GLOBALS['errno'] = $error; 00194 } else { 00195 return FALSE; 00196 } 00197 00198 // Some errors messages cannot be obtained by mysql_error() 00199 if ($error && $error == 2002) { 00200 $error = '#' . ((string) $error) . ' - ' . $GLOBALS['strServerNotResponding'] . ' ' . $GLOBALS['strSocketProblem']; 00201 } elseif ($error && $error == 2003) { 00202 $error = '#' . ((string) $error) . ' - ' . $GLOBALS['strServerNotResponding']; 00203 } elseif ($error && defined('PMA_MYSQL_INT_VERSION') && PMA_MYSQL_INT_VERSION >= 40100) { 00204 $error = '#' . ((string) $error) . ' - ' . $error_message; 00205 } elseif ($error) { 00206 $error = '#' . ((string) $error) . ' - ' . PMA_convert_display_charset($error_message); 00207 } 00208 return $error; 00209 } 00210 00211 function PMA_DBI_close($link = NULL) { 00212 if (empty($link)) { 00213 if (isset($GLOBALS['userlink'])) { 00214 $link = $GLOBALS['userlink']; 00215 } else { 00216 return FALSE; 00217 } 00218 } 00219 return @mysql_close($link); 00220 } 00221 00222 function PMA_DBI_num_rows($result) { 00223 if (!is_bool($result)) { 00224 return mysql_num_rows($result); 00225 } else { 00226 return 0; 00227 } 00228 } 00229 00230 function PMA_DBI_insert_id($link = NULL) { 00231 if (empty($link)) { 00232 if (isset($GLOBALS['userlink'])) { 00233 $link = $GLOBALS['userlink']; 00234 } else { 00235 return FALSE; 00236 } 00237 } 00238 return mysql_insert_id($link); 00239 } 00240 00241 function PMA_DBI_affected_rows($link = NULL) { 00242 if (empty($link)) { 00243 if (isset($GLOBALS['userlink'])) { 00244 $link = $GLOBALS['userlink']; 00245 } else { 00246 return FALSE; 00247 } 00248 } 00249 return mysql_affected_rows($link); 00250 } 00251 00252 function PMA_DBI_get_fields_meta($result) { 00253 $fields = array(); 00254 $num_fields = mysql_num_fields($result); 00255 for ($i = 0; $i < $num_fields; $i++) { 00256 $fields[] = PMA_convert_display_charset(mysql_fetch_field($result, $i)); 00257 } 00258 return $fields; 00259 } 00260 00261 function PMA_DBI_num_fields($result) { 00262 return mysql_num_fields($result); 00263 } 00264 00265 function PMA_DBI_field_len($result, $i) { 00266 return mysql_field_len($result, $i); 00267 } 00268 00269 function PMA_DBI_field_name($result, $i) { 00270 return mysql_field_name($result, $i); 00271 } 00272 00273 function PMA_DBI_field_flags($result, $i) { 00274 return PMA_convert_display_charset(mysql_field_flags($result, $i)); 00275 } 00276 00277 ?>