再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
威锋网7月10日消锋网7月10日消息,《植物大战僵尸2》 如今...
威锋网7月10日消息,《植物大...
近日,开发商 Esquilax Games ..
说到方块游戏,相信有很多朋友应该还会记得 Gavina Games 早...
威锋网7月10日消息,《植物大...
近日,开发商 Esquilax Games ..
说到方块游戏,相信有很多朋友应该还会记得 Gavina Games 早...
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
再吸金!SE推出《最终幻想:全员勇者》钥匙扣
您需要通过验证再能继续浏览 3秒后开始验证
威锋旗下产品
Hi~我是威威!
粤公网安备 11号
新三板上市公司威锋科技(836555)
增值电信业务经营许可证:
Powered by Discuz!ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录
thinkphp 3.2.3对Oracle的插入数据存在bug,直接导致我今天debug了一晚上。还好找到了在官方社区找到了solution。 以下转自 ,感谢的solution。
TP+ORACLE插入数据BUG修复以及获取自增Id支持getLastInsID方法
这些天在做Api接口时候,发现用TP操作Oracle数据库,发现查询修改删除都能执行,
但一旦执行插入操作老是报错。类似问题比如:
花了点时间仔细研究一下,发现是BUG.
下面是我的解决办法:
针对版本:ThinkPHP3.2.3
修改文件:Db\Driver\Oracle.class.php
找到 execute方法,
找到:this-&initConnect(true);这句前面加上bind = $this-& 这句:
public function execute($str,$fetchSql=false) {
$bind = $this-&
$this-&initConnect(true);
找到:foreach ($this-&bind as $key =& $val) { 这句
前面加上 $this-&bind = $this-&bind ? $this-&bind : $ 这句:
$this-&bind = $this-&bind ? $this-&bind : $bind; //新增这句
foreach ($this-&bind as $key =& $val) {
找到 $this-&lastInsID = $this-&_linkID-&lastInsertId(); 这句
将其修改为:
$this-&lastInsID = $this-&lastInsertId($this-&table);
Oracle.class.php文件中新增以下代码:
public function lastInsertId($sequence = '') {
$lastInsID = $this-&_linkID-&lastInsertId();
} catch(\PDOException $e) {
$lastInsID = 0;
$seqPrefix = C("DB_SEQUENCE_PREFIX") ? C("DB_SEQUENCE_PREFIX") : 'seq_';
$sequence = $sequence ? $sequence : $seqPrefix.$this-&
$q = $this-&query("SELECT {$sequence}.CURRVAL as t FROM DUAL");
$lastInsID = $q[0]['t'];
} catch(\Exception $e) {
return $lastInsID;
调用方法:
1.数据库配置:
'DB_PREFIX'=&'tb_',
'DB_SEQUENCE_PREFIX' =& 'seq_',
'DB_TRIGGER_PREFIX' =& 'tig_',
2.先创建user数据表
表字段:id, username, password
3.然后创建[序列+触发器]
create sequence seq_user
increment by 1
start with 1
nomaxvalue
nominvalue
create or replace trigger "tig_user"
before insert on tb_user
for each row when(new.id is null)
select seq_user.nextval into :new.id from
4.最后一步,在UserAction中写插入数据代码如下:
$data = array(
'phone'=&$phone,
'password'=&md5($password)
$r = M('user')-&field(true)-&add($data);
echo '上次插入记录:'.$r;
$this-&error('操作失败');
本文已收录于以下专栏:
相关文章推荐
让ThinkPHP3.2.3 支持对Oracle LOB数据的操作1.
问题由来PHP2.
配置PHP:OCI8首先,原理是利用PHP OCI8的拓展函数库。所以,必须先把OCI8,和php_oc...
SQLServer 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。 I...
mysql插入数据后返回自增ID的方法
mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数...
MyBatis 3的自增ID的Bug(续)
/2010/07/java-to-insert-in-the-main-table-record-id-from-the-table-for-t...
Entity Framework在将数据插入数据库时,如果主键字段是自增标识列,会将该自增值返回给实体对象对应的属性。
比如下面添加博客随笔至数据库的示例代码:
var blogP...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)