4 * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
5 * Copyright (C) 2002-2011 The Nucleus Group
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)
14 * @license http://nucleuscms.org/license.txt GNU General Public License
15 * @copyright Copyright (C) 2002-2011 The Nucleus Group
20 * complete sql_* wrappers for mysql functions
22 * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query
28 if (function_exists('mysql_query') && !function_exists('sql_fetch_assoc'))
31 *Errors before the database connection has been made
33 function startUpError($msg, $title) {
34 if (!defined('_CHARSET')) {
35 define('_CHARSET', 'UTF-8');
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"');
40 sendContentType('text/html','',_CHARSET);
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>
46 <h1><?php echo htmlspecialchars($title,ENT_QUOTES)?></h1>
55 * Connects to mysql server with arguments
57 function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {
59 $CONN = @mysql_connect($mysql_host, $mysql_user, $mysql_password);
60 if ($mysql_database) mysql_select_db($mysql_database,$CONN);
66 * Connects to mysql server
68 function sql_connect() {
69 global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN;
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');
74 // <add for garble measure>
75 if (defined(_CHARSET)){
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.
85 sql_set_charset_jp($charset);
86 // </add for garble measure>*/
92 * disconnects from SQL server
94 function sql_disconnect($conn = false) {
96 if (!$conn) $conn = $MYSQL_CONN;
100 function sql_close($conn = false) {
102 if (!$conn) $conn = $MYSQL_CONN;
107 * executes an SQL query
109 function sql_query($query, $conn = false) {
110 global $SQLCount,$MYSQL_CONN;
111 if (!$conn) $conn = $MYSQL_CONN;
113 $res = mysql_query($query,$conn) or print("mySQL error with query $query: " . mysql_error($conn) . '<p />');
118 * executes an SQL error
120 function sql_error($conn = false)
123 if (!$conn) $conn = $MYSQL_CONN;
124 return mysql_error($conn);
128 * executes an SQL db select
130 function sql_select_db($db,$conn = false)
133 if (!$conn) $conn = $MYSQL_CONN;
134 return mysql_select_db($db,$conn);
138 * executes an SQL real escape
140 function sql_real_escape_string($val,$conn = false)
143 if (!$conn) $conn = $MYSQL_CONN;
144 return mysql_real_escape_string($val,$conn);
148 * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed
150 function sql_quote_string($val,$conn = false) {
152 if (!$conn) $conn = $MYSQL_CONN;
153 return "'".mysql_real_escape_string($val,$conn)."'";
157 * executes an SQL insert id
159 function sql_insert_id($conn = false)
162 if (!$conn) $conn = $MYSQL_CONN;
163 return mysql_insert_id($conn);
167 * executes an SQL result request
169 function sql_result($res, $row, $col)
171 return mysql_result($res,$row,$col);
175 * frees sql result resources
177 function sql_free_result($res)
179 return mysql_free_result($res);
183 * returns number of rows in SQL result
185 function sql_num_rows($res)
187 return mysql_num_rows($res);
191 * returns number of rows affected by SQL query
193 function sql_affected_rows($conn = false)
196 if (!$conn) $conn = $MYSQL_CONN;
197 return mysql_affected_rows($conn);
201 * Get number of fields in result
203 function sql_num_fields($res)
205 return mysql_num_fields($res);
209 * fetches next row of SQL result as an associative array
211 function sql_fetch_assoc($res)
213 return mysql_fetch_assoc($res);
217 * Fetch a result row as an associative array, a numeric array, or both
219 function sql_fetch_array($res)
221 return mysql_fetch_array($res);
225 * fetches next row of SQL result as an object
227 function sql_fetch_object($res)
229 return mysql_fetch_object($res);
233 * Get a result row as an enumerated array
235 function sql_fetch_row($res)
237 return mysql_fetch_row($res);
241 * Get column information from a result and return as an object
243 function sql_fetch_field($res,$offset = 0)
245 return mysql_fetch_field($res,$offset);
249 * Get current system status (returns string)
251 function sql_stat($conn=false)
254 if (!$conn) $conn = $MYSQL_CONN;
255 return mysql_stat($conn);
259 * Returns the name of the character set
261 function sql_client_encoding($conn=false)
264 if (!$conn) $conn = $MYSQL_CONN;
265 return mysql_client_encoding($conn);
269 * Get SQL client version
271 function sql_get_client_info()
273 return mysql_get_client_info();
277 * Get SQL server version
279 function sql_get_server_info($conn=false)
282 if (!$conn) $conn = $MYSQL_CONN;
283 return mysql_get_server_info($conn);
287 * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure
289 function sql_get_host_info($conn=false)
292 if (!$conn) $conn = $MYSQL_CONN;
293 return mysql_get_host_info($conn);
297 * Returns the SQL protocol on success, or FALSE on failure.
299 function sql_get_proto_info($conn=false)
302 if (!$conn) $conn = $MYSQL_CONN;
303 return mysql_get_proto_info($conn);
307 * Get the name of the specified field in a result
309 function sql_field_name($res, $offset = 0)
311 return mysql_field_name($res, $offset);
314 /**************************************************************************
315 Unimplemented mysql_* functions
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)
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)
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))
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)
346 *******************************************************************/
349 * for preventing I/O strings from auto-detecting the charactor encodings by MySQL
351 * Jan.20, 2011 by kotorisan and cacher
352 * refering to their conversation below,
353 * http://japan.nucleuscms.org/bb/viewtopic.php?p=26581
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.
358 function sql_set_charset_jp($charset) {
359 switch(strtolower($charset)){
\r
369 $charset = 'gb2312';
\r
378 $charset = 'latin1';
\r
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);