OSDN Git Service

4.0のtrunkを展開するためにmasterディレクトリを作成しファイル群を移動した。
[nucleus-jp/nucleus-jp-ancient.git] / master / nucleus / libs / sql / mysql.php
1 <?php
2
3 /*
4  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
5  * Copyright (C) 2002-2011 The Nucleus Group
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  * (see nucleus/documentation/index.html#license for more info)
12  */
13 /**
14  * @license http://nucleuscms.org/license.txt GNU General Public License
15  * @copyright Copyright (C) 2002-2011 The Nucleus Group
16  * @version $Id$
17  */
18  
19 /*
20  * complete sql_* wrappers for mysql functions
21  *
22  * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query
23  */
24
25
26 $MYSQL_CONN = 0;
27
28 if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
29 {
30         /**
31          *Errors before the database connection has been made
32          */
33         function startUpError($msg, $title) {
34                 if (!defined('_CHARSET')) {
35                         define('_CHARSET', 'UTF-8');
36                 }
37                 if (!defined('_HTML_XML_NAME_SPACE_AND_LANG_CODE')) {
38                         define('_HTML_XML_NAME_SPACE_AND_LANG_CODE', 'xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us"');
39                 }
40                 sendContentType('text/html','',_CHARSET);
41                 ?>
42 <html <?php echo _HTML_XML_NAME_SPACE_AND_LANG_CODE; ?>>
43         <head><meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET?>" />
44         <title><?php echo htmlspecialchars($title,ENT_QUOTES)?></title></head>
45         <body>
46                 <h1><?php echo htmlspecialchars($title,ENT_QUOTES)?></h1>
47                 <?php echo $msg?> 
48         </body>
49 </html>
50 <?php
51                 exit;
52         }
53
54         /**
55           * Connects to mysql server with arguments
56           */
57         function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {
58                 
59                 $CONN = @mysql_connect($mysql_host, $mysql_user, $mysql_password);
60                 if ($mysql_database) mysql_select_db($mysql_database,$CONN);
61
62                 return $CONN;
63         }
64         
65         /**
66           * Connects to mysql server
67           */
68         function sql_connect() {
69                 global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;
70
71                 $MYSQL_CONN = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD) or startUpError('<p>Could not connect to MySQL database.</p>', 'Connect Error');
72                 mysql_select_db($MYSQL_DATABASE) or startUpError('<p>Could not select database: ' . mysql_error() . '</p>', 'Connect Error');
73
74 // <add for garble measure>
75                 if (defined('_CHARSET')){
76                         $charset  = _CHARSET;
77                 }else{
78                         $resource = sql_query("show variables LIKE 'character_set_database'");
79                         $fetchDat = sql_fetch_assoc($resource);
80                         $charset  = $fetchDat['Value'];
81                         // in trouble of encoding,uncomment the following line.
82                         // $charset = "ujis";
83                         // $charset = "utf8";
84                 }
85                 sql_set_charset_jp($charset);
86 // </add for garble measure>*/
87
88                 return $MYSQL_CONN;
89         }
90
91         /**
92           * disconnects from SQL server
93           */
94         function sql_disconnect($conn = false) {
95                 global $MYSQL_CONN;
96                 if (!$conn) $conn = $MYSQL_CONN;
97                 @mysql_close($conn);
98         }
99         
100         function sql_close($conn = false) {
101                 global $MYSQL_CONN;
102                 if (!$conn) $conn = $MYSQL_CONN;
103                 @mysql_close($conn);
104         }
105         
106         /**
107           * executes an SQL query
108           */
109         function sql_query($query, $conn = false) {
110                 global $SQLCount,$MYSQL_CONN;
111                 if (!$conn) $conn = $MYSQL_CONN;
112                 $SQLCount++;
113                 $res = mysql_query($query,$conn) or print("mySQL error with query $query: " . mysql_error($conn) . '<p />');
114                 return $res;
115         }
116         
117         /**
118           * executes an SQL error
119           */
120         function sql_error($conn = false)
121         {
122                 global $MYSQL_CONN;
123                 if (!$conn) $conn = $MYSQL_CONN;
124                 return mysql_error($conn);
125         }
126         
127         /**
128           * executes an SQL db select
129           */
130         function sql_select_db($db,$conn = false)
131         {
132                 global $MYSQL_CONN;
133                 if (!$conn) $conn = $MYSQL_CONN;
134                 return mysql_select_db($db,$conn);
135         }
136         
137         /**
138           * executes an SQL real escape 
139           */
140         function sql_real_escape_string($val,$conn = false)
141         {
142                 global $MYSQL_CONN;
143                 if (!$conn) $conn = $MYSQL_CONN;
144                 return mysql_real_escape_string($val,$conn);
145         }
146         
147         /**
148           * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed 
149           */
150         function sql_quote_string($val,$conn = false) {
151                 global $MYSQL_CONN;
152                 if (!$conn) $conn = $MYSQL_CONN;
153                 return "'".mysql_real_escape_string($val,$conn)."'";
154         }
155         
156         /**
157           * executes an SQL insert id
158           */
159         function sql_insert_id($conn = false)
160         {
161                 global $MYSQL_CONN;
162                 if (!$conn) $conn = $MYSQL_CONN;
163                 return mysql_insert_id($conn);
164         }
165         
166         /**
167           * executes an SQL result request
168           */
169         function sql_result($res, $row, $col)
170         {
171                 return mysql_result($res,$row,$col);
172         }
173         
174         /**
175           * frees sql result resources
176           */
177         function sql_free_result($res)
178         {
179                 return mysql_free_result($res);
180         }
181         
182         /**
183          * returns number of rows in SQL result
184          */
185         function sql_num_rows($res)
186         {
187                 return mysql_num_rows($res);
188         }
189         
190         /**
191          * returns number of rows affected by SQL query
192          */
193         function sql_affected_rows($conn = false)
194         {
195                 global $MYSQL_CONN;
196                 if (!$conn) $conn = $MYSQL_CONN;
197                 return mysql_affected_rows($conn);
198         }
199         
200         /**
201           * Get number of fields in result
202           */
203         function sql_num_fields($res)
204         {
205                 return mysql_num_fields($res);
206         }
207         
208         /**
209           * fetches next row of SQL result as an associative array
210           */
211         function sql_fetch_assoc($res)
212         {
213                 return mysql_fetch_assoc($res);
214         }
215         
216         /**
217           * Fetch a result row as an associative array, a numeric array, or both
218           */
219         function sql_fetch_array($res)
220         {
221                 return mysql_fetch_array($res);
222         }
223         
224         /**
225           * fetches next row of SQL result as an object
226           */
227         function sql_fetch_object($res)
228         {
229                 return mysql_fetch_object($res);
230         }
231         
232         /**
233           * Get a result row as an enumerated array
234           */
235         function sql_fetch_row($res)
236         {
237                 return mysql_fetch_row($res);
238         }
239         
240         /**
241           * Get column information from a result and return as an object
242           */
243         function sql_fetch_field($res,$offset = 0)
244         {
245                 return mysql_fetch_field($res,$offset);
246         }
247         
248         /**
249           * Get current system status (returns string)
250           */
251         function sql_stat($conn=false)
252         {
253                 global $MYSQL_CONN;
254                 if (!$conn) $conn = $MYSQL_CONN;
255                 return mysql_stat($conn);
256         }
257         
258         /**
259           * Returns the name of the character set
260           */
261         function sql_client_encoding($conn=false)
262         {
263                 global $MYSQL_CONN;
264                 if (!$conn) $conn = $MYSQL_CONN;
265                 return mysql_client_encoding($conn);
266         }
267         
268         /**
269           * Get SQL client version
270           */
271         function sql_get_client_info()
272         {
273                 return mysql_get_client_info();
274         }
275         
276         /**
277           * Get SQL server version
278           */
279         function sql_get_server_info($conn=false)
280         {
281                 global $MYSQL_CONN;
282                 if (!$conn) $conn = $MYSQL_CONN;
283                 return mysql_get_server_info($conn);
284         }
285         
286         /**
287           * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure
288           */
289         function sql_get_host_info($conn=false)
290         {
291                 global $MYSQL_CONN;
292                 if (!$conn) $conn = $MYSQL_CONN;
293                 return mysql_get_host_info($conn);
294         }
295         
296         /**
297           * Returns the SQL protocol on success, or FALSE on failure. 
298           */
299         function sql_get_proto_info($conn=false)
300         {
301                 global $MYSQL_CONN;
302                 if (!$conn) $conn = $MYSQL_CONN;
303                 return mysql_get_proto_info($conn);
304         }
305
306         /**
307          * Get the name of the specified field in a result
308          */
309         function sql_field_name($res, $offset = 0)
310         {
311                 return mysql_field_name($res, $offset);
312         }
313
314 /**************************************************************************
315         Unimplemented mysql_* functions
316         
317 # mysql_ data_ seek (maybe useful)
318 # mysql_ errno (maybe useful)
319 # mysql_ fetch_ lengths (maybe useful)
320 # mysql_ field_ flags (maybe useful)
321 # mysql_ field_ len (maybe useful)
322 # mysql_ field_ seek (maybe useful)
323 # mysql_ field_ table (maybe useful)
324 # mysql_ field_ type (maybe useful)
325 # mysql_ info (maybe useful)
326 # mysql_ list_ processes (maybe useful)
327 # mysql_ ping (maybe useful)
328 # mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)
329 # mysql_ thread_ id (maybe useful)
330
331 # mysql_ db_ name (useful only if working on multiple dbs which we do not do)
332 # mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)
333
334 # mysql_ pconnect (probably not useful and could cause some unintended performance issues)
335 # mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))
336
337 # mysql_ change_ user (deprecated)
338 # mysql_ create_ db (deprecated)
339 # mysql_ db_ query (deprecated)
340 # mysql_ drop_ db (deprecated)
341 # mysql_ escape_ string (deprecated)
342 # mysql_ list_ fields (deprecated)
343 # mysql_ list_ tables (deprecated)
344 # mysql_ tablename (deprecated)
345
346 *******************************************************************/
347
348         /*
349          * for preventing I/O strings from auto-detecting the charactor encodings by MySQL
350          * since 3.62_beta-jp
351          * Jan.20, 2011 by kotorisan and cacher
352          * refering to their conversation below,
353          * http://japan.nucleuscms.org/bb/viewtopic.php?p=26581
354          * 
355          * NOTE:        shift_jis is only supported for output. Using shift_jis in DB is prohibited.
356          * NOTE:        iso-8859-x,windows-125x if _CHARSET is unset.
357          */
358         function sql_set_charset_jp($charset) {
359                 switch(strtolower($charset)){\r
360                         case 'utf-8':
361                         case 'utf8':\r
362                                 $charset = 'utf8';\r
363                                 break;\r
364                         case 'euc-jp':
365                         case 'ujis':\r
366                                 $charset = 'ujis';\r
367                                 break;\r
368                         case 'gb2312':\r
369                                 $charset = 'gb2312';\r
370                                 break;
371                         /*\r
372                         case 'shift_jis':
373                         case 'sjis':\r
374                                 $charset = 'sjis';\r
375                                 break;
376                         */\r
377                         default:
378                                 $charset = 'latin1';\r
379                                 break;\r
380                 }
381                 $mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info())));
382                 if (version_compare($mySqlVer, '5.0.7', '>=') && function_exists('mysql_set_charset')) {
383                         $res = mysql_set_charset($charset);
384                 } elseif (version_compare($mySqlVer, '4.1.0', '>=')) {
385                         $res = sql_query("SET CHARACTER SET " . $charset);
386                 }
387                 return $res;
388         }
389 }