thinkPHP5如何连接Oracle数据库反码如何计算
thinkPHP5如何从MySQL迁移到
前⾔
php连接到oracle的配置,本⽂不进⾏过多阐述,如有不懂,请看⽂章:Oracle11g客户端安装教程。本⽂主要的⼯作是探讨在thinkPHP 框架下MySQL迁移到Oracle后数据库操作⽅法的改写,不讨论迁移细节。
数据库迁移
本⽂使⽤快速将MySQL迁移到Oracle,具体操作本⽂不再细述,请⾃⾏搜索相关教程。
迁移后在执⾏新增和删除操作时,出现问题。定位到数据库⽅法,发现是表的问题。
案例说明
1. ⽤于测试的sql语句(mysql版本),导⼊后请利⽤navicat传输到Oracle。
“`sql
– phpMyAdmin SQL Dump
– version 4.0.10.11
– 主机: 127.0.0.1:3306
– ⽣成⽇期: 2018-07-02 21:53:02
– 服务器版本: 5.5.54-log
– PHP 版本: 5.6.14
SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
SET time_zone = “+00:00”;
/!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;
/!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;
/
!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;
/!40101 SET NAMES utf8 /;
– 数据库: ray
– 表的结构 ray_user
CREATE TABLE IF NOT EXISTS ray_user (
user_id int(11) unsigned NOT NULL AUTO_INCREMENT,
user_name varchar(10) NOT NULL,
user_pwd varchar(40) NOT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;
– 转存表中的数据 ray_user
冒泡排序就是递增排序–
INSERT INTO ray_user  (user_id , user_name , user_pwd ) VALUES
(1, ‘updatename’, ‘ray’),
(2, ‘testname’, ‘testpwd’),
/!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT /;
/!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS /; /!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION /;“`
1. mysql环境下的CURD操作(经简单测试后增删改查⽆问题)数据库配置database.php <?php // +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 thinkphp All rights reserved.// +----------------------------------------------------------------------// | Licensed ( /licenses/LICENSE-
2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail>// +----------------------------------------------------------------------return  [  // 数据库类型  'type'            => 'mysql',  // 服务器地址  'hostname'        => '127.0.0.1',  // 数据库名  'database'        => 'ray',  // ⽤户名  'username'        => 'root',  // 密码  'password'        => '', // 你的密码  // 端⼝  'hostport'        => '3306',  // 连接dsn    'dsn'            => '',  // 数据库连接参数  'params'          => [],  // 数据库编码默认采⽤utf8  'charset'        => 'utf8',  // 数据库表前缀  'prefix'          => 'ray_',  // 数据库调试模式  'debug'          => true ,  // 数据库部署⽅式:0 集中式(单⼀服务器),1 分布式(主从服务器)  'deploy'          => 0,  // 数据库读写是否分离 主从式有效  'rw_separate'    => false ,  // 读写分离后 主服务器数量  'master_num'      => 1,  // 指定从服务器序号  'slave_no'        => '',  // 是否严格检查字段是否存在  'fields_strict'  => true ,  // 数据集返回类型  'resultset_type'  => 'array',  // ⾃动写⼊时间戳字段  'auto_timestamp'  => false ,  // 时间字段取出后的默认时间格式  'datetime_format' => 'Y-m-d H:i:s',
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
throwable两种异常类型
控制器User.php 模型User.php    // 是否需要进⾏SQL 性能分析  'sql_explain'    => false ,];
51
52
53
54<?php namespace  app \index \controller ;use  think \Controller ;use  app \index \model \User  as  US ;class  User extends  Controller {public  function  index () {    $obj_user = new  US;    // 查    $data = $obj_user->operateUser("find",null ,"1");    var_dump($data);    // 更新    $updateData = [        'user_name' => 'updatename'    ];    $result = $obj_user->operateUser("update",$updateData,"1");    var_dump($result);    // 新增    $insertData = [        'user_name' => 'testname',        'user_pwd' => 'testpwd'    ];    $result = $obj_user->operateUser("insert",$insertData);    var_dump($result);    // 删除    $result = $obj_user->operateUser("delete",null ,'2');    var_dump($result);}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
edge浏览器安装silverlight
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31<?php namespace  app \index \model ;use  think \Model ;class  User extends  Model {public  function  operateUser ($directive,$data = null,$user_id = null) {    if ($directive == "find" && $user_id != null ) {        return  User::where('user_id',$user_id)->find();    } else  if ($directive == "insert" && $data != null ) {        return  User::save($data) ? 1 : 0;    } else  if ($directive == "update" && $data != null  && $user_id != null ) {        return  User::where('user_id',$user_id)->find()->save($data) ? 1 : 0;    } else  if ($directive == "delete" && $user_id != null ) {        return  User::where('user_id',$user_id)->delete() ? 1 : 0;    } else  {        return  null ;    }}
1
2
3
4
5
6
7
8
9
10
11
12
13borderstyle虚线
14
15
16
17
18
19
20
2. oracle环境下的CURD操作数据库配置⽂件database.php
3. 根据指定ID查询记录}}
20
21<?php // +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 thinkphp All rights reserved.// +----------------------------------------------------------------------// | Licensed ( /licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail>// +----------------------------------------------------------------------return  [  // 数据库类型  'type'            => '\think\oracle\Connection',  // 服务器地址  'hostname'        => '127.0.0.1',  // 数据库名  'database'        => 'orcl',  // ⽤户名  'username'        => 'Scott',  // 密码  'password'        => '', // 你的密码  // 端⼝  'hostport'        => '1521',  // 连接dsn    'dsn'            => '',  // 数
据库连接参数  'params'          => [],  // 数据库编码默认采⽤utf8  'charset'        => 'utf8',  // 数据库表前缀  'prefix'          => 'ray_',  // 数据库调试模式  'debug'          => true ,  // 数据库部署⽅式:0 集中式(单⼀服务器),1 分布式(主从服务器)  'deploy'          => 0,  // 数据库读写是否分离 主从式有效  'rw_separate'    => false ,  // 读写分离后 主服务器数量  'master_num'      => 1,  // 指定从服务器序号  'slave_no'        => '',  // 是否严格检查字段是否存在  'fields_strict'  => true ,  // 数据集返回类型  'resultset_type'  => 'array',  // ⾃动写⼊时间戳字段  'auto_timestamp'  => false ,  // 时间字段取出后的默认时间格式  'datetime_format' => 'Y-m-d H:i:s',  // 是否需要进⾏SQL 性能分析  'sql_explain'    => false ,];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql语句转oracle
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
由于Oracle表名和字段名均需加上双引号,故改写thinkphp\library\db\Builder.php 中的parseSqlTable 和parseWhereItem ⽅法。改写完成后根据ID查询记录OK。
改写了控制器和模型层⽅法:控制器Users.php    .../**    * 将SQL 语句中的__TABLE_NAME__字符串替换成带前缀的表名(⼩写)    * @access  protected    * @param  string $sql sql 语句    * @return  string    */  protected  function  parseSqlTable ($sql)  {        return  '"'. strtoupper($this->query->parseSqlTable($sql)).'"';  前后加上双引号并将表明设置为⼤写  }......    // where ⼦单元分析  protected  function  parseWhereItem ($field, $val, $rule = '', $options = [], $binds = [], $bindName = null)  {      // 字段分析      $key = $field ? '"'. $this->parseKey($field, $options, true ) .'"' : ''; 前后加上双引号      // 查询规则和条件      if  (!is_array($val)) {          $val = is_null($val) ? ['null', ''] : ['=', $val];      }      list ($exp, $value) = $val;      ...
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。