OSDN Git Service

MERGE: リビジョン1787。Adminクラスのいくつかのメソッドのコード整理。
[nucleus-jp/nucleus-next.git] / nucleus / libs / sql / pdo.php
1 <?php\r
2 \r
3 /*\r
4  * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
5  * Copyright (C) 2002-2012 The Nucleus Group\r
6  *\r
7  * This program is free software; you can redistribute it and/or\r
8  * modify it under the terms of the GNU General Public License\r
9  * as published by the Free Software Foundation; either version 2\r
10  * of the License, or (at your option) any later version.\r
11  * (see nucleus/documentation/index.html#license for more info)\r
12  */\r
13 /**\r
14  * @license http://nucleuscms.org/license.txt GNU General Public License\r
15  * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
16  * @version $Id$\r
17  */\r
18  \r
19 /*\r
20  * complete sql_* wrappers for mysql functions\r
21  *\r
22  * functions moved from globalfunctions.php: sql_connect, sql_disconnect, sql_query\r
23  */\r
24  \r
25 \r
26 $MYSQL_CONN = 0;\r
27 global $SQL_DBH;\r
28 $SQL_DBH = NULL;\r
29 \r
30 if (!function_exists('sql_fetch_assoc'))\r
31 {\r
32         /**\r
33          * Errors before the database connection has been made\r
34          */\r
35         function startUpError($msg, $title) {\r
36                 ?>\r
37                 <html xmlns="http://www.w3.org/1999/xhtml">\r
38                         <head><title><?php echo Entity::hsc($title)?></title></head>\r
39                         <body>\r
40                                 <h1><?php echo Entity::hsc($title)?></h1>\r
41                                 <?php echo $msg?>\r
42                         </body>\r
43                 </html>\r
44                 <?php   exit;\r
45         }\r
46         \r
47         /**\r
48           * Connects to mysql server\r
49           */\r
50         function sql_connect_args($mysql_host = 'localhost', $mysql_user = '', $mysql_password = '', $mysql_database = '') {\r
51                 global $MYSQL_HANDLER;\r
52                 \r
53                 try {\r
54                         if (i18n::strpos($mysql_host,':') === false) {\r
55                                 $host = $mysql_host;\r
56                                 $port = '';\r
57                                 $portnum = '';\r
58                         }\r
59                         else {\r
60                                 list($host,$port) = preg_split("#:#", $mysql_host);\r
61                                 if (isset($port)) {\r
62                                         $portnum = $port;\r
63                                         $port = ';port='.trim($port);\r
64                                 }\r
65                                 else {\r
66                                         $port = '';\r
67                                         $portnum = '';\r
68                                 }\r
69                         }\r
70                         \r
71                         switch ($MYSQL_HANDLER[1]) {\r
72                                 case 'sybase':\r
73                                 case 'dblib':\r
74                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
75                                         else $port = '';\r
76                                         $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
77                                 break;\r
78                                 case 'mssql':\r
79                                         if (is_numeric($portnum)) $port = ','.intval($portnum);\r
80                                         else $port = '';\r
81                                         $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
82                                 break;\r
83                                 case 'oci':\r
84                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
85                                         else $port = '';\r
86                                         $DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$mysql_database, $mysql_user, $mysql_password);\r
87                                 break;\r
88                                 case 'odbc':\r
89                                         if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
90                                         else $port = '';\r
91                                         $DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$mysql_database.';PROTOCOL=TCPIP;UID='.$mysql_user.';PWD='.$mysql_password);\r
92 \r
93                                 break;\r
94                                 case 'pgsql':\r
95                                         if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
96                                         else $port = '';\r
97                                         $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
98                                 break;\r
99                                 case 'sqlite':\r
100                                 case 'sqlite2':\r
101                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
102                                         else $port = '';\r
103                                         $DBH = new PDO($MYSQL_HANDLER[1].':'.$mysql_database, $mysql_user, $mysql_password);\r
104                                         if ($DBH)\r
105                                         {\r
106                                                 $DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);\r
107                                                 $DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);\r
108                                         } \r
109                                 break;\r
110                                 default:\r
111                                         //mysql\r
112                                         $DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$mysql_database, $mysql_user, $mysql_password);\r
113                                 break;\r
114                         }\r
115         \r
116                         \r
117                                                 \r
118                 } catch (PDOException $e) {\r
119                         $DBH =NULL;\r
120                         startUpError('<p>a1 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
121                 }\r
122                 \r
123                 if ( $mysql_database )\r
124                 {\r
125                         sql_set_charset('utf8');\r
126                 }\r
127                 \r
128                 /*\r
129                 // For debugging\r
130                 echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';\r
131                 $result = sql_query('SHOW VARIABLES LIKE \'char%\';');\r
132                 while(FALSE !== ($row = sql_fetch_row($result)))\r
133                 {\r
134                         echo "{$row[0]}: {$row[1]}\n";\r
135                 }\r
136                 */\r
137                 \r
138                 return $DBH;\r
139         }\r
140         \r
141         /**\r
142           * Connects to mysql server\r
143           */\r
144         function sql_connect() {\r
145                 global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;\r
146                 $SQL_DBH = NULL;\r
147                 try {\r
148                         if (i18n::strpos($MYSQL_HOST,':') === false) {\r
149                                 $host = $MYSQL_HOST;\r
150                                 $port = '';\r
151                                 $portnum = ''; \r
152                         }\r
153                         else {\r
154                                 list($host,$port) = preg_split("#:#", $MYSQL_HOST);\r
155                                 if (isset($port)) {\r
156                                         $portnum = $port;\r
157                                         $port = ';port='.trim($port);\r
158                                 }\r
159                                 else {\r
160                                         $port = '';\r
161                                         $portnum = '';\r
162                                 }\r
163                         }\r
164                         \r
165                         switch ($MYSQL_HANDLER[1]) {\r
166                                 case 'sybase':\r
167                                 case 'dblib':\r
168                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
169                                         else $port = '';\r
170                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
171                                 break;\r
172                                 case 'mssql':\r
173                                         if (is_numeric($portnum)) $port = ','.intval($portnum);\r
174                                         else $port = '';\r
175                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
176                                 break;\r
177                                 case 'oci':\r
178                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
179                                         else $port = '';\r
180                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
181                                 break;\r
182                                 case 'odbc':\r
183                                         if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
184                                         else $port = '';\r
185                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$MYSQL_DATABASE.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);\r
186 \r
187                                 break;\r
188                                 case 'pgsql':\r
189                                         if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
190                                         else $port = '';\r
191                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
192                                 break;\r
193                                 case 'sqlite':\r
194                                 case 'sqlite2':\r
195                                         if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
196                                         else $port = '';\r
197                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
198                                         if ($SQL_DBH)\r
199                                         {\r
200                                                 $SQL_DBH->sqliteCreateFunction('SUBSTRING', 'substr', 3);\r
201                                                 $SQL_DBH->sqliteCreateFunction('UNIX_TIMESTAMP', 'strtotime', 1);\r
202                                         } \r
203                                 break;\r
204                                 default:\r
205                                         //mysql\r
206                                         $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
207                                 break;\r
208                         }\r
209                         \r
210                         //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$MYSQL_DATABASE, $MYSQL_USER, $MYSQL_PASSWORD);\r
211                                                 \r
212                 } catch (PDOException $e) {\r
213                         $SQL_DBH = NULL;\r
214                         startUpError('<p>a2 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
215                 }\r
216                 \r
217                 if ( $MYSQL_DATABASE )\r
218                 {\r
219                         sql_set_charset('utf8');\r
220                 }\r
221                 \r
222                 /*\r
223                 // For debugging\r
224                 echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';\r
225                 $result = sql_query('SHOW VARIABLES LIKE \'char%\';');\r
226                 while(FALSE !== ($row = sql_fetch_row($result)))\r
227                 {\r
228                         echo "{$row[0]}: {$row[1]}\n";\r
229                 }\r
230                 */\r
231                 \r
232                 $MYSQL_CONN =& $SQL_DBH;\r
233 //              echo '<hr />DBH: '.print_r($SQL_DBH,true).'<hr />';             \r
234                 $MYSQL_CONN =& $SQL_DBH;\r
235                 return $SQL_DBH;\r
236 \r
237         }\r
238 \r
239         /**\r
240           * disconnects from SQL server\r
241           */\r
242         function sql_disconnect(&$dbh=NULL) {\r
243                 global $SQL_DBH;\r
244                 if (is_null($dbh)) $SQL_DBH = NULL;\r
245                 else $dbh = NULL;\r
246         }\r
247         \r
248         /**\r
249          * sql_close()\r
250          * use sql_disconnect() instead of this\r
251          * \r
252          * @deprecated\r
253          * @param       resource        $conn   resource of mySQL connection\r
254          * @return      void\r
255          */\r
256         function sql_close(&$dbh=NULL)\r
257         {\r
258                 global $SQL_DBH;\r
259                 if ( is_null($dbh) )\r
260                 {\r
261                         $SQL_DBH = NULL;\r
262                 }\r
263                 else\r
264                 {\r
265                         $dbh = NULL;\r
266                 }\r
267                 return;\r
268         }\r
269         \r
270         /**\r
271           * executes an SQL query\r
272           */\r
273         function sql_query($query,$dbh=NULL) {\r
274                 global $SQLCount,$SQL_DBH;\r
275                 $SQLCount++;\r
276 //echo '<hr />SQL_DBH: ';\r
277 //print_r($SQL_DBH);\r
278 //echo '<hr />DBH: ';\r
279 //print_r($dbh);\r
280 //echo '<hr />';\r
281 //echo $query.'<hr />';\r
282                 if (is_null($dbh)) $res = $SQL_DBH->query($query);\r
283                 else $res = $dbh->query($query);\r
284                 //if ($res->errorCode() != '00000') {\r
285                 //      $errors = $res->errorInfo();\r
286                 if (($res === false) || ($res->errorCode() != '00000') ) {\r
287                         $errors = ($res !== false) ? $res->errorInfo() : ( is_object($dbh) ? $dbh->errorInfo() : $SQL_DBH->errorInfo());\r
288                         print("SQL error with query $query: " . $errors[0].'-'.$errors[1].' '.$errors[2] . '<p />');\r
289                 }\r
290                 \r
291                 return $res;\r
292         }\r
293         \r
294         /**\r
295           * executes an SQL error\r
296           */\r
297         function sql_error($dbh=NULL)\r
298         {\r
299                 global $SQL_DBH;\r
300                 if (is_null($dbh)) $error = $SQL_DBH->errorInfo();\r
301                 else $error = $dbh->errorInfo();\r
302                 if ($error[0] != '00000') {\r
303                         return $error[0].'-'.$error[1].' '.$error[2];\r
304                 }\r
305                 else return '';\r
306         }\r
307         \r
308         /**\r
309           * executes an SQL db select\r
310           */\r
311         function sql_select_db($db,&$dbh=NULL)\r
312         {\r
313                 global $MYSQL_HOST, $MYSQL_USER, $MYSQL_PASSWORD, $MYSQL_DATABASE, $MYSQL_CONN, $MYSQL_HANDLER, $SQL_DBH;\r
314 //echo '<hr />'.print_r($dbh,true).'<hr />';\r
315 //exit;\r
316                 if (is_null($dbh)) { \r
317                         try {\r
318                                 $SQL_DBH = NULL;\r
319                                 list($host,$port) = preg_split("#:#", $MYSQL_HOST);\r
320                                 if (isset($port)) {\r
321                                         $portnum = $port;\r
322                                         $port = ';port='.trim($port);\r
323                                 }\r
324                                 else {\r
325                                         $port = '';\r
326                                         $portnum = '';\r
327                                 }\r
328                                 //$SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.trim($host).$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
329                                 //$SQL_DBH = sql_connect();\r
330                                 switch ($MYSQL_HANDLER[1]) {\r
331                                         case 'sybase':\r
332                                         case 'dblib':\r
333                                                 if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
334                                                 else $port = '';\r
335                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
336                                         break;\r
337                                         case 'mssql':\r
338                                                 if (is_numeric($portnum)) $port = ','.intval($portnum);\r
339                                                 else $port = '';\r
340                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
341                                         break;\r
342                                         case 'oci':\r
343                                                 if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
344                                                 else $port = '';\r
345                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':dbname=//'.$host.$port.'/'.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
346                                         break;\r
347                                         case 'odbc':\r
348                                                 if (is_numeric($portnum)) $port = ';PORT='.intval($portnum);\r
349                                                 else $port = '';\r
350                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME='.$host.$port.';DATABASE='.$db.';PROTOCOL=TCPIP;UID='.$MYSQL_USER.';PWD='.$MYSQL_PASSWORD);\r
351 \r
352                                         break;\r
353                                         case 'pgsql':\r
354                                                 if (is_numeric($portnum)) $port = ';port='.intval($portnum);\r
355                                                 else $port = '';\r
356                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
357                                         break;\r
358                                         case 'sqlite':\r
359                                         case 'sqlite2':\r
360                                                 if (is_numeric($portnum)) $port = ':'.intval($portnum);\r
361                                                 else $port = '';\r
362                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':'.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
363                                         break;\r
364                                         default:\r
365                                                 //mysql\r
366                                                 $SQL_DBH = new PDO($MYSQL_HANDLER[1].':host='.$host.$port.';dbname='.$db, $MYSQL_USER, $MYSQL_PASSWORD);\r
367                                         break;\r
368                                 }\r
369                                 return 1;\r
370                         } catch (PDOException $e) {\r
371                                 startUpError('<p>a3 Error!: ' . $e->getMessage() . '</p>', 'Connect Error');\r
372                                 return 0;\r
373                         }\r
374                 }\r
375                 else {\r
376                         if ($dbh->exec("USE $db") !== false) return 1;\r
377                         else return 0;\r
378                 }\r
379         }\r
380         \r
381         /**\r
382           * executes an SQL real escape \r
383           */\r
384         function sql_real_escape_string($val,$dbh=NULL)\r
385         {\r
386                 global $MYSQL_HANDLER;\r
387                 if (stripos($MYSQL_HANDLER[1] , 'sqlite') !== false)\r
388                 {\r
389                         return sqlite_escape_string($val); \r
390                 }\r
391                 else \r
392                 {\r
393                         return addslashes($val);\r
394                 }\r
395         }\r
396         \r
397         /**\r
398           * executes an PDO::quote() like escape, ie adds quotes arround the string and escapes chars as needed \r
399           */\r
400         function sql_quote_string($val,$dbh=NULL) {\r
401                 global $SQL_DBH;\r
402                 if (is_null($dbh))\r
403                         return $SQL_DBH->quote($val);\r
404                 else\r
405                         return $dbh->quote($val);\r
406         }\r
407         \r
408         /**\r
409           * executes an SQL insert id\r
410           */\r
411         function sql_insert_id($dbh=NULL)\r
412         {       \r
413                 global $SQL_DBH;\r
414                 if (is_null($dbh))\r
415                         return $SQL_DBH->lastInsertId();\r
416                 else\r
417                         return $dbh->lastInsertId();\r
418         }\r
419         \r
420         /**\r
421           * executes an SQL result request\r
422           */\r
423         function sql_result($res, $row = 0, $col = 0)\r
424         {\r
425                 $results = array();\r
426                 if (intval($row) < 1) {\r
427                         $results = $res->fetch(PDO::FETCH_BOTH);\r
428                         return $results[$col];\r
429                 }\r
430                 else {\r
431                         for ($i = 0; $i < intval($row); $i++) {\r
432                                 $results = $res->fetch(PDO::FETCH_BOTH);\r
433                         }\r
434                         $results = $res->fetch(PDO::FETCH_BOTH);\r
435                         return $results[$col];\r
436                 }\r
437         }\r
438         \r
439         /**\r
440           * frees sql result resources\r
441           */\r
442         function sql_free_result($res)\r
443         {\r
444                 $res = NULL;\r
445                 return true;\r
446         }\r
447         \r
448         /**\r
449           * returns number of rows in SQL result\r
450           */\r
451         function sql_num_rows($res)\r
452         {\r
453                 return $res->rowCount();\r
454         }\r
455         \r
456         /**\r
457           * returns number of rows affected by SQL query\r
458           */\r
459         function sql_affected_rows($res)\r
460         {\r
461                 return $res->rowCount();\r
462         }\r
463         \r
464         /**\r
465           * Get number of fields in result\r
466           */\r
467         function sql_num_fields($res)\r
468         {\r
469                 return $res->columnCount();\r
470         }\r
471         \r
472         /**\r
473           * fetches next row of SQL result as an associative array\r
474           */\r
475         function sql_fetch_assoc($res)\r
476         {\r
477                 $results = array();\r
478                 $results = $res->fetch(PDO::FETCH_ASSOC);       \r
479                 return $results;\r
480         }\r
481         \r
482         /**\r
483           * Fetch a result row as an associative array, a numeric array, or both\r
484           */\r
485         function sql_fetch_array($res)\r
486         {\r
487                 $results = array();\r
488                 $results = $res->fetch(PDO::FETCH_BOTH);\r
489                 return $results;\r
490         }\r
491         \r
492         /**\r
493           * fetches next row of SQL result as an object\r
494           */\r
495         function sql_fetch_object($res)\r
496         {\r
497                 $results = NULL;\r
498                 $results = $res->fetchObject(); \r
499                 return $results;\r
500         }\r
501         \r
502         /**\r
503           * Get a result row as an enumerated array\r
504           */\r
505         function sql_fetch_row($res)\r
506         {\r
507                 $results = array();\r
508                 $results = $res->fetch(PDO::FETCH_NUM); \r
509                 return $results;\r
510         }\r
511         \r
512         /**\r
513           * Get column information from a result and return as an object\r
514           */\r
515         function sql_fetch_field($res,$offset = 0)\r
516         {\r
517                 $results = array();\r
518                 $obj = NULL;\r
519                 $results = $res->getColumnMeta($offset);\r
520                 foreach($results as $key=>$value) {\r
521                         $obj->$key = $value;\r
522                 }\r
523                 return $obj;\r
524         }\r
525         \r
526         /**\r
527           * Get current system status (returns string)\r
528           */\r
529         function sql_stat($dbh=NULL)\r
530         {\r
531                 //not implemented\r
532                 global $SQL_DBH;\r
533                 if (is_null($dbh))\r
534                         return '';\r
535                 else\r
536                         return '';\r
537         }\r
538         \r
539         /**\r
540           * Returns the name of the character set\r
541           */\r
542         function sql_client_encoding($dbh=NULL)\r
543         {\r
544                 //not implemented\r
545                 global $SQL_DBH;\r
546                 if (is_null($dbh))\r
547                         return '';\r
548                 else\r
549                         return '';\r
550         }\r
551         \r
552         /**\r
553           * Get SQL client version\r
554           */\r
555         function sql_get_client_info()\r
556         {\r
557                 global $SQL_DBH;\r
558                 return $SQL_DBH->getAttribute(constant("PDO::ATTR_CLIENT_VERSION"));\r
559         }\r
560         \r
561         /**\r
562           * Get SQL server version\r
563           */\r
564         function sql_get_server_info($dbh=NULL)\r
565         {\r
566                 global $SQL_DBH;\r
567                 if (is_null($dbh))\r
568                         return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));\r
569                 else\r
570                         return $dbh->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));\r
571         }\r
572         \r
573         /**\r
574           * Returns a string describing the type of SQL connection in use for the connection or FALSE on failure\r
575           */\r
576         function sql_get_host_info($dbh=NULL)\r
577         {\r
578                 global $SQL_DBH;\r
579                 if (is_null($dbh))\r
580                         return $SQL_DBH->getAttribute(constant("PDO::ATTR_SERVER_INFO"));\r
581                 else\r
582                         return $dbh->getAttribute(constant("PDO::ATTR_SERVER_INFO"));\r
583         }\r
584         \r
585         /**\r
586           * Returns the SQL protocol on success, or FALSE on failure. \r
587           */\r
588         function sql_get_proto_info($dbh=NULL)\r
589         {\r
590                 //not implemented\r
591                 global $SQL_DBH;\r
592                 if (is_null($dbh))\r
593                         return false;\r
594                 else\r
595                         return false;\r
596         }\r
597 \r
598         /**\r
599          * Get the name of the specified field in a result\r
600          */\r
601         function sql_field_name($res, $offset = 0)\r
602         {\r
603                 $column = $res->getColumnMeta($offset);\r
604                 if ($column) {\r
605                         return $column['name'];\r
606                 }\r
607                 return false;\r
608         }\r
609         \r
610         /**\r
611          * Set character encodings in each fields\r
612          */\r
613         function sql_set_charset($charset)\r
614         {\r
615                 global $MYSQL_HANDLER, $SQL_DBH;\r
616                 \r
617                 $result = TRUE;\r
618                 \r
619                 if ( $MYSQL_HANDLER[0] == '' || in_array('mysql', $MYSQL_HANDLER) )\r
620                 {\r
621                         /*\r
622                          * NOTE:\r
623                          * It's great help to you refering the same function in mysql.php.\r
624                          * PDO::MySQL has no function as same as mysql_set_charset().\r
625                          */\r
626                         $charset = strtolower($charset);\r
627                         $mysql_version = preg_replace('#^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{1,2})(.*)$#', '$1.$2.$3', sql_get_server_info($SQL_DBH));\r
628                         \r
629                         if ( version_compare($mysql_version, '5.0.7', '<') )\r
630                         {\r
631                                 $result = sql_query("SET CHARACTER SET {$charset};");\r
632                         }\r
633                         else\r
634                         {\r
635                                 $result = sql_query("SET NAMES {$charset};");\r
636                         }\r
637                 }\r
638                 return $result;\r
639         }\r
640         \r
641 /**************************************************************************\r
642 Unimplemented mysql_* functions\r
643 \r
644 # mysql_ data_ seek (maybe useful)\r
645 # mysql_ errno (maybe useful)\r
646 # mysql_ fetch_ lengths (maybe useful)\r
647 # mysql_ field_ flags (maybe useful)\r
648 # mysql_ field_ len (maybe useful)\r
649 # mysql_ field_ seek (maybe useful)\r
650 # mysql_ field_ table (maybe useful)\r
651 # mysql_ field_ type (maybe useful)\r
652 # mysql_ info (maybe useful)\r
653 # mysql_ list_ processes (maybe useful)\r
654 # mysql_ ping (maybe useful)\r
655 # mysql_ set_ charset (maybe useful, requires php >=5.2.3 and mysql >=5.0.7)\r
656 # mysql_ thread_ id (maybe useful)\r
657 \r
658 # mysql_ db_ name (useful only if working on multiple dbs which we do not do)\r
659 # mysql_ list_ dbs (useful only if working on multiple dbs which we do not do)\r
660 \r
661 # mysql_ pconnect (probably not useful and could cause some unintended performance issues)\r
662 # mysql_ unbuffered_ query (possibly useful, but complicated and not supported by all database drivers (pdo))\r
663 \r
664 # mysql_ change_ user (deprecated)\r
665 # mysql_ create_ db (deprecated)\r
666 # mysql_ db_ query (deprecated)\r
667 # mysql_ drop_ db (deprecated)\r
668 # mysql_ escape_ string (deprecated)\r
669 # mysql_ list_ fields (deprecated)\r
670 # mysql_ list_ tables (deprecated)\r
671 # mysql_ tablename (deprecated)\r
672 \r
673 *******************************************************************/\r
674 \r
675 }\r