table_forum_optionvalue.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: table_forum_optionvalue.php 27738 2012-02-13 10:02:53Z monkey $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class table_forum_optionvalue extends discuz_table
  12. {
  13. public function __construct() {
  14. $this->_table = '';
  15. $this->_pk = '';
  16. parent::__construct();
  17. }
  18. public function create($sortid, $fields, $dbcharset) {
  19. if(!$sortid || !$fields || !$dbcharset) {
  20. return;
  21. }
  22. $sortid = intval($sortid);
  23. $this->_table = 'forum_optionvalue'.$sortid;
  24. $query = DB::query("SHOW TABLES LIKE '%t'", array($this->_table));
  25. if(DB::num_rows($query) != 1) {
  26. $create_table_sql = "CREATE TABLE ".DB::table($this->_table)." ($fields) TYPE=MyISAM;";
  27. $db = DB::object();
  28. $create_table_sql = $this->syntablestruct($create_table_sql, $db->version() > '4.1', $dbcharset);
  29. DB::query($create_table_sql);
  30. }
  31. }
  32. public function truncate($sortid) {
  33. if(!$sortid) {
  34. return;
  35. }
  36. $sortid = intval($sortid);
  37. $this->_table = 'forum_optionvalue'.$sortid;
  38. DB::query("TRUNCATE %t", array($this->_table));
  39. }
  40. public function showcolumns($sortid) {
  41. if(!$sortid) {
  42. return;
  43. }
  44. $sortid = intval($sortid);
  45. $this->_table = 'forum_optionvalue'.$sortid;
  46. $db = DB::object();
  47. if($db->version() > '4.1') {
  48. $query = DB::query("SHOW FULL COLUMNS FROM %t", array($this->_table), true);
  49. } else {
  50. $query = DB::query("SHOW COLUMNS FROM %t", array($this->_table), true);
  51. }
  52. $tables = array();
  53. while($field = @DB::fetch($query)) {
  54. $tables[$field['Field']] = 1;
  55. }
  56. return $tables;
  57. }
  58. public function alter($sortid, $sql) {
  59. if(!$sortid) {
  60. return;
  61. }
  62. $sortid = intval($sortid);
  63. $this->_table = 'forum_optionvalue'.$sortid;
  64. DB::query("ALTER TABLE %t %i", array($this->_table, $sql));
  65. }
  66. public function drop($sortid) {
  67. if(!$sortid) {
  68. return;
  69. }
  70. $sortid = intval($sortid);
  71. $this->_table = 'forum_optionvalue'.$sortid;
  72. DB::query("DROP TABLE IF EXISTS %t", array($this->_table));
  73. }
  74. public function syntablestruct($sql, $version, $dbcharset) {
  75. if(strpos(trim(substr($sql, 0, 18)), 'CREATE TABLE') === FALSE) {
  76. return $sql;
  77. }
  78. $sqlversion = strpos($sql, 'ENGINE=') === FALSE ? FALSE : TRUE;
  79. if($sqlversion === $version) {
  80. return $sqlversion && $dbcharset ? preg_replace(array('/ character set \w+/i', '/ collate \w+/i', "/DEFAULT CHARSET=\w+/is"), array('', '', "DEFAULT CHARSET=$dbcharset"), $sql) : $sql;
  81. }
  82. if($version) {
  83. return preg_replace(array('/TYPE=HEAP/i', '/TYPE=(\w+)/is'), array("ENGINE=MEMORY DEFAULT CHARSET=$dbcharset", "ENGINE=\\1 DEFAULT CHARSET=$dbcharset"), $sql);
  84. } else {
  85. return preg_replace(array('/character set \w+/i', '/collate \w+/i', '/ENGINE=MEMORY/i', '/\s*DEFAULT CHARSET=\w+/is', '/\s*COLLATE=\w+/is', '/ENGINE=(\w+)(.*)/is'), array('', '', 'ENGINE=HEAP', '', '', 'TYPE=\\1\\2'), $sql);
  86. }
  87. }
  88. public function fetch_all_tid($sortid, $where) {
  89. if(!$sortid) {
  90. return;
  91. }
  92. $sortid = intval($sortid);
  93. $this->_table = 'forum_optionvalue'.$sortid;
  94. $query = DB::query("SELECT tid FROM %t %i", array($this->_table, $where));
  95. $return = array();
  96. while($thread = DB::fetch($query)) {
  97. $return[] = $thread['tid'];
  98. }
  99. return $return;
  100. }
  101. public function update($sortid, $tid, $fid, $fields) {
  102. if(!$sortid || !$fields) {
  103. return;
  104. }
  105. $sortid = intval($sortid);
  106. $this->_table = 'forum_optionvalue'.$sortid;
  107. DB::query("UPDATE %t SET %i WHERE tid=%d AND fid=%d", array($this->_table, $fields, $tid, $fid));
  108. }
  109. public function insert($sortid, $fields, $replace = false) {
  110. if(!$sortid || !$fields) {
  111. return;
  112. }
  113. $sortid = intval($sortid);
  114. $this->_table = 'forum_optionvalue'.$sortid;
  115. DB::query("%i INTO %t %i", array(!$replace ? 'INSERT' : 'REPLACE', $this->_table, $fields));
  116. }
  117. }
  118. ?>