PHP配置Oracle并导出所有表

  1. 首先下载 Oracle 的即时客户端,下载地址:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

根据自己的机器及项目进行选择版本跟架构。

  1. 将下载的即时客户端解压到没有中文的目录中,并加入到环境变量,最好最后重启一次。
  2. 如果使用 pdo_oci 的方式进行连接,则直接将 php.ini 文件中的 pdo_oci,pdo_odbc 扩展打开即可。

extension=pdo_oci

  1. 如果使用 oci 不使用 pdo_oci 的方式连接,请先安装 oci 扩展,并修改 php.ini 文件。

下载地址:https://pecl.php.net/package/oci8 。找到自己机器合适的扩展,下载放到 php 配置文件的扩展目录中。

关于 扩展目录,可以在 php.ini 文件中搜索 extension_dir 可以查找到。

扩展配置好后在 php.ini 文件中加入一行

extension=php_oci8.dll

关闭项目跟web服务。打开 phpinfo(); 进行验证。如果存在 oci8 的扩展项说明安装成功。

使用 php pdo 连接 Oracle 并将所有的表及字段导出到 html 中

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <title>表格式导出</title>

  <style type="text/css">

    table.gridtable{

      font-family:微软雅黑;

      font-size:12px;

      width:100%;

      color:#333333;

      border-width:1px;

      border-color:#666666;

      border-collapse:collapse;

    }

    table.gridtable th{

      border-width:1px;

      padding:10px;

      border-style:solid;

      border-color:#666666;

      background-color:#dedede;

    }

    table.gridtable td{

      border-width:1px;

      padding:10px;

      border-style:solid;

      border-color:#666666;

      background-color:#ffffff;

    }

  </style>

</head>

<body>

<?php

set_time_limit(0);

setlocale(LC_CTYPE, 'POSIX');

$tns = "  

(DESCRIPTION =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.44.0.5)(PORT = 1521))

  )

  (CONNECT_DATA =

    (SERVICE_NAME = xe)

  )

  )

    ";

$db_username = "SEU";

$db_password = "123456";

try{

  $conn = new \PDO("oci:dbname=".$tns.";charset=zhs16gbk",$db_username,$db_password);

  $sth = $conn->prepare("select table_name from user_tables");

  $sth->execute();

  $tbs = $sth->fetchAll(\PDO::FETCH_ASSOC);  

  //var_dump($tbs);die;

  $sql = $conn->prepare("select * from user_tab_comments");

  $sql->execute();

    $tab = $sql->fetchAll(\PDO::FETCH_ASSOC);

  $arr = [];

  // var_dump($tab);die;

  $a = 0;

  foreach($tab as $k=>$v){

    if($v['TABLE_TYPE']=='TABLE'){

      //foreach($tbs as $key=>$val){    

        if($v['COMMENTS'] == ''){

          $arr[$a]['COMMENTS'] = '无';

        }else{

          $arr[$a]['COMMENTS'] =iconv("gbk", "utf-8//ignore", $v['COMMENTS']);

        }  

      $arr[$a]['TABLE_NAME'] =$v['TABLE_NAME'];        

      //}

      $a++;

    }

  }

  // var_dump($arr);die;

  for($i = 0; $i < count ( $arr ); $i ++) {

    //$rs2 [$i] ['tb'] = strtolower ( $arr [$i]['TABLE_NAME'] );

    $rs2 [$i] ['tb'] =  ( $arr [$i]['TABLE_NAME'] );

    $rs2 [$i] ['zs'] = $arr[$i]['COMMENTS'];

      $sth = $conn->prepare("

        select col.COLUMN_NAME, com.Comments, col.DATA_TYPE, col.DATA_LENGTH

        from sys.all_tab_columns col,

          sys.all_col_comments com

        where col.owner = '{$db_username}'

        and col.table_name = '{$arr[$i]['TABLE_NAME']}'

        and com.Owner (+) = '{$db_username}'

        and com.Table_Name (+) = '{$arr[$i]['TABLE_NAME']}'

        and com.Column_Name (+) = col.Column_Name

        order by col.column_id");

        $sth->execute();

      $rs2 [$i] ['fd'] = $sth->fetchAll(\PDO::FETCH_ASSOC);

      foreach ( $rs2 [$i] ['fd'] as $k => $v ) {

        // $rs2 [$i] ['fd'] [$k] ['COLUMN_NAME'] = strtolower ( $v ['COLUMN_NAME'] );

        // $rs2 [$i] ['fd'] [$k] ['DATA_TYPE'] = strtolower ( $v ['DATA_TYPE'] );

        $rs2 [$i] ['fd'] [$k] ['COLUMN_NAME'] =  ( $v ['COLUMN_NAME'] );

        $rs2 [$i] ['fd'] [$k] ['DATA_TYPE'] =  ( $v ['DATA_TYPE'] );

        $rs2 [$i] ['fd'] [$k] ['DATA_LENGTH'] = $v ['DATA_LENGTH'] / 2;

      }

    }

}catch(PDOException $e){

  echo ($e->getMessage());

}

?>
<div class='dict'>
<b>
共<?=$a?>张表
</b>
<div id='top'></div>
<?php foreach($rs2 as $k=>$v1):?>
<b><a href='#<?=$v1['tb']?>'><?=$v1['tb']?></a>
(<a href='#<?=$v1['tb']?>'><?=$v1['zs']?></a>)
</b>
<br>

<?php endforeach;?>

<?php foreach($rs2 as $k=>$v1):?>

<table id='<?=$v1['tb']?>' class="gridtable">

  <caption><b><?=$v1['tb']?><a href='#top' style='font-size:12px;font-weight:normal;margin-left: 20px;'><?=$v1['zs']?></a></b></caption>

  <tr>

    <th width=210>字段</th>

    <th width=150>类型</th>

    <th>注释</th>

  </tr>

  <?php foreach($v1['fd'] as $v2):?>

    <tr>

      <td><?=$v2['COLUMN_NAME']?></td>

      <td><?=$v2['DATA_TYPE']?>(<?=$v2['DATA_LENGTH']?>)</td>

      <td><?=iconv("gbk", "utf-8//ignore", $v2['COMMENTS'])?></td>

    </tr>

  <?php endforeach;?>

</table>

<br />

<?php endforeach;?>

</div>

</body>
</html>