thinkphp5支持oracle吗

thinkphp5支持oracle吗

首先,我们知道php是完全支持oracle的,那么作为php框架的thinkphp5也是完全可以支持oracle的。

thinkphp5如何连接oracle?

数据库: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

立即学习“PHP免费学习笔记(深入)”;

INSERT INTO ray_user (user_id, user_name, user_pwd) VALUES(1, ‘updatename’, ‘ray’),(2, ‘testname’, ‘testpwd’),

1、mysql环境下的CURD操作

数据库配置database.php

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st // +----------------------------------------------------------------------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',   // 是否需要进行SQL性能分析   'sql_explain'     => false,];

控制器User.php

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);}}

模型User.php

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;    }}}

2、oracle环境下的CURD操作

数据库配置文件database.php

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st // +----------------------------------------------------------------------return [   // 数据库类型   'type'            => 'thinkoracleConnection',   // 服务器地址   '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,];

3、根据指定ID查询记录

由于Oracle表名和字段名均需加上双引号,故改写thinkphplibrarydbBuilder.php中的parseSqlTable和parseWhereItem方法。改写完成后根据ID查询记录OK。

   .../**    * 将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;       ...

改写了控制器和模型层方法:

控制器Users.php

operateUser("find",null,"1");        var_dump($data);        // 更新        $updateData = [            'NAME' => "updateora",            'PWD' => "newpwd"        ];        $result = $obj_users->operateUser("update",$updateData,"1");        var_dump($result);        // 插入        $insertData = [            'NAME' => 'testname',            'PWD' => 'testpwd'        ];        $result = $obj_users->operateUser("insert",$insertData);        var_dump($result);        // 删除        $result = $obj_users->operateUser("delete",null,'18');        var_dump($result);    }}

模型Users.php

find();        } else if($directive == "insert" && $data != null) {            /*$id = Users::getLastInsID('SEQUSERS')-2;            var_dump($id);            $data['ID'] = $id;*/            return Users::save($data,[],'SEQUSERS') ? 1 : 0; // 注意这里传参        } else if($directive == "update" && $data != null && $ID != null) {            return Users::where('ID',$ID)->find()->save($data) ? 1 : 0;        } else if($directive == "delete" && $ID != null) {            return Users::where('ID',$ID)->delete() ? 1 : 0;        } else {            return null;        }    }}

经测试更新数据通过,接下来是最为头疼的新增。因为MySQL主键自增通过给PK添加A-I属性即可,而Oracle则需要通过触发器来实现。下面采用了简单的实现方法。

触发器,序列实现Oracle主键自增。

CREATE OR REPLACE TRIGGER TRIUSERS BEFOREINSERT ON SCOTT.USERS FOR EACH ROWWHEN (new.id is null      )beginselect SEQUSERS.nextval into:new.id from dual;end;create sequence SEQUSERSminvalue 1maxvalue 999999999999999999999999999start with 1increment by 1nocache;

需要改写think-oraclesrcConnection.php里面的getLastInsId()方法

/**     * 获取最近插入的ID     * @access public     * @param string  $sequence     自增序列名     * @return string     */    public function getLastInsID($sequence = null)    {        $pdo    = $this->linkID->query("select {$sequence}.nextval as id from dual");        $pdo    = $this->linkID->query("select {$sequence}.currval as id from dual");        $result = $pdo->fetchColumn();        $pdo    = $this->linkID->query("alter sequence {$sequence} increment by -1");        $pdo    = $this->linkID->query("select {$sequence}.nextval as id from dual");        $pdo    = $this->linkID->query("alter sequence {$sequence} increment by 1");        return $result;    }

以上内容仅供参考!

推荐教程:thinkphp教程

以上就是thinkphp5支持oracle吗的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/108592.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月22日 21:52:38
下一篇 2025年11月22日 22:25:13

相关推荐

  • 比特币价格 比特币行情网址

    数字资产市场以其显著的波动性持续吸引着全球目光,比特币作为其中的代表,其价格走势是众多参与者密切关注的焦点。这种价格的日常变动受到多种因素影响,包括宏观经济环境、政策法规动态、技术发展以及市场情绪等。对于希望了解或参与这一市场的人们来说,获取准确、实时的比特币价格数据至关重要。这些数据和交易活动主要…

    2025年12月8日 好文分享
    000
  • FOMO和FUD在加密货币中分别是什么意思?

    在波动剧烈的加密货币市场中,情绪扮演着重要的角色。两个经常被提及的术语是fomo和fud。它们描述了影响投资者行为的强大心理状态,理解这些概念对于 navigating 这个独特的资产类别非常重要。 理解FOMO FOMO是“Fear Of Missing Out”的缩写,意为“害怕错过”。在加密货…

    2025年12月8日
    000
  • 币安币怎么买最方便?(2025新手入门、充值交易教程)

    欢迎来到进入数字资产世界的第一步,特别是针对在2025年及以后希望了解如何便捷购买币安币(BNB)的新手用户。BNB作为全球领先数字资产交易平台之一的币安平台的核心组成部分,其用途广泛,包括但不限于支付交易费用享有折扣、参与Launchpad项目、以及构建在BNB Chain生态系统上的各种应用。对…

    2025年12月8日
    000
  • 比特币,山寨币和财富转移:解码加密十字路口

    比特币的价格停滞,altcoin的历史性疲软与财富转移趋势。纽约风格的加密货币观察博客。 嘿,加密圈的朋友们!比特币、山寨币和财富流动的世界总是充满了惊喜。让我们一起来看看当前加密市场的动向。 Altcoin低迷还是新周期前兆? 过去两年,Altcoin市场被比特币彻底压制。我们正在见证历史性疲软,…

    2025年12月8日
    000
  • AltCoins,最搜索的前15名:加密货币宇宙中什么不是热和什么

    深入探索altcoins的多变领域!从lilpepe这类meme币到stellar和cardano等成熟项目,揭示当前最热趋势与潜在机遇。 Altcoin市场是一场狂野的旅程,不是吗?让我们剖析围绕“Altcoins,最热门搜索,前15名”的最新动态,看看哪些项目正在掀起波澜。 最受关注:快照 Co…

    2025年12月8日
    000
  • 2025山寨币挖掘首选:十大热门币种交易平台汇总

    2025十大热门山寨币及其交易平台 在深入了解交易平台之前,我们先来审视一下2025年有望崭露头角的十大热门山寨币。需要注意的是,加密货币市场波动剧烈,本文列出的币种是基于当前市场热度、技术发展和社区活跃度等因素进行预测,不构成任何投资建议。投资前务必进行充分的研究和风险评估。 以下是部分热门山寨币…

    2025年12月8日 好文分享
    000
  • QFSCoin,加密矿山和Litecoin:嗡嗡声是什么?

    探索qfscoin、莱特币与mimblewimble在隐私领域的协同效应,以及加密挖矿行业的持续演进。深入了解qfscoin如何简化btc、ltc和doge的挖矿流程。 欢迎来到加密世界。今天我们聚焦QFSCoin、莱特币及挖矿技术的发展趋势。核心在于莱特币的隐私功能升级,以及QFSCoin如何让挖…

    2025年12月8日
    000
  • Solana,XRP和不断发展的加密技术领域:纽约市的观点

    从市场表现到机构采纳和监管前景,探讨solana、xrp以及整体加密技术生态的复杂互动。 Solana,XRP与加密行业的演变:纽约视角 加密领域正迎来新一轮热议,Solana与XRP成为焦点。从出人意料的市场走势到潜在的政策变化,我们来看看这些数字资产当前的发展态势。 XRP的强势反弹 即便是So…

    2025年12月8日
    000
  • Polkadot:从以太坊杀手到幽灵链?加密衰落现象

    polkadot正在失去光彩吗?本文回顾了polkadot从曾经的“以太坊杀手”光环,走向如今被质疑为“幽灵链”的过程,分析其面临的困境与可能的未来。 Polkadot:从明星项目到幽灵链?加密世界的衰退现象 Polkadot曾被视为区块链领域的颠覆者,一度被称为“以太坊杀手”,但如今却频频面临关于…

    2025年12月8日
    000
  • Dogecoin,Opto Miner和Mining:加密收益的新时代

    探索dogecoin的复兴以及opto miner如何简化采矿,从而使每个人都可以获得加密货币奖励。 Dogecoin再次掀起热潮,借助Opto Miner,参与这一趋势从未如此轻松。让我们深入了解如何利用这些机会,获取可观的加密收益。 Dogecoin的复兴:为何此时爆发? 在马斯克公开支持并将其…

    2025年12月8日
    000
  • AAVE是什么币

    AAVE 是以太坊生态中领先的去中心化借贷协议,其核心功能包括流动性池借贷、治理代币 AAVE 的多重用途及多链扩展。1. AAVE 基于以太坊并扩展至 Polygon、Avalanche 等链,总量 1600 万枚,长期位居加密货币前 50;2. 起源于 2017 年的 ETHLend,2020 …

    2025年12月8日
    000
  • 必安binance手机app使用教程

    下载必安BinanceApp交易加密货币的正确步骤是:1.从正规渠道下载安装;2.注册时准确填写手机号或邮箱并设置强密码;3.充值时注意选择正确的区块链网络;4.熟悉市场价单和限价单的基本交易操作。苹果和安卓用户均可在应用商店搜索“Binance”下载,安卓用户也可通过官网获取最新版本,安装时需允许…

    2025年12月8日
    000
  • 一夜暴富?这些暴涨的币正在改变市场格局!

    近期加密货币市场多个币种暴涨,Notcoin(NOT)、Pepe(PEPE)、Brett(BRETT)、Render(RNDR)、Ondo(ONDO)分别因社交+区块链、社区共识、Base链生态、AI算力需求、机构入场等因素实现大幅上涨;其上涨逻辑包括强叙事支撑、低市值高波动、交易所上线效应、社区与…

    2025年12月8日
    000
  • dogecoin怎么交易买卖 2025热门交易所地址推荐

    数字货币交易平台是进行dogecoin等加密资产买卖的核心场所。这些平台提供用户界面、撮合交易引擎、安全的资金托管以及多样化的交易工具,使得全球各地的用户可以便捷地参与到加密市场的流动性中。对于希望买卖dogecoin或其他数字资产的用户而言,选择一个功能强大且可靠的交易平台至关重要。合适的平台需要…

    2025年12月8日 好文分享
    000
  • 抓住风口!这些暴涨的币或成下一波牛市引擎

    2025年下半年加密货币市场回暖,以下项目具备推动下一轮牛市潜力:1. 公链赛道中Solana(SOL)凭借Firedancer升级及生态活跃度提升表现亮眼;Toncoin(TON)依托Telegram整合和社交传播模式快速崛起;2. AI+区块链领域Render(RNDR)通过整合全球算力服务AI…

    2025年12月8日
    000
  • 2025最新RWA代币有哪些

    真实世界资产(RWA)代币化通过区块链技术将房地产、债券等实体资产转化为数字代币,提升流动性与可及性,并连接传统金融与DeFi生态。1.RWA被视为推动加密市场增长的关键驱动力;2.Ondo Finance(ONDO)代币化美债,提供美元本位收益;3.MANTRA(OM)构建合规Layer 1链,优…

    2025年12月8日
    000
  • 2025年最值得关注的暴涨币种

    2025年加密货币市场预计迎来牛市,Solana(SOL)、Ethereum(ETH)、Render(RNDR)等10大潜力币种值得关注。1.Solana凭借高性能和生态爆发有望再创新高;2.Ethereum受Layer 2升级和ETF预期推动价格或破万;3.Render作为AI算力网络需求激增可能…

    2025年12月8日
    000
  • 币安币属于什么类型代币?谁主导发行?算主流币吗?

    bnb,全称binance coin,是全球领先数字资产交易平台之一——binance(币安)生态系统的原生数字资产。它最初于2017年通过首次代币发行(ico)问世,起初基于以太坊区块链发行,作为一种erc-20代币。其核心用途是为binance平台用户提供交易费用折扣。然而,随着binance生…

    2025年12月8日
    000
  • 盘点近期暴涨的币种

    Notcoin(NOT)、Pepe(PEPE)、Render(RNDR)等8种加密货币在2024年Q3-Q4期间表现亮眼,1. NOT因Telegram生态和交易所上线7天涨300%+;2. PEPE受Memecoin回暖和巨鲸增持推动1个月涨500%+;3. RNDR受益AI算力需求增长2个月涨4…

    2025年12月8日
    000
  • 2026年最值得关注的暴涨币种,提前布局赢未来!

    2026年有望成为“百倍币”的加密货币包括比特币、以太坊、Solana、Chainlink、Polkadot、Ripple及AI+区块链、MEME币、GameFi等新兴赛道项目。1. 比特币(BTC)因减半效应、机构增持和监管明朗化,价格或达15万-20万美元;2. 以太坊(ETH)受益于生态升级、…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信