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浏览器安装silverlight16
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语句转oracle25
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小时内删除。
发表评论