亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

thinkphp5連接oracle用insert插入數據失敗

thinkphp5連接oracle用insert插入數據失敗

PHP
Smart貓小萌 2019-03-15 14:28:11
使用最新版TP5框架,insert操作失敗,應該是id的問題,官方沒看到關于oracle介紹,不知道該如何寫,新人,求點撥,附插入mysql的代碼寫法,求改成oracle,(oracle建好序列號,索引) function writelog($uid,$username,$description,$status) { $data['admin_id'] = $uid; $data['admin_name'] = $username; $data['description'] = $description; $data['status'] = $status; $data['ip'] = request()->ip(); $data['add_time'] = time(); $log = Db::name('think_log')->insert($data); } 使用上述代碼報錯提示(主鍵ID沒有值)
查看完整描述

4 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

oracle沒有自增字段,LOG_ID字段的值必須人工賦值,人工寫sql的話大概是這樣的:

INSERT INTO TINK_LOG(LOG_ID) VALUES(S_T_THINK_LOG.NEXTVAL)

如果TP不支持取oracle序列的值,可以在表TINK_LOG中創建一個觸發器:

create or replace trigger trg_TINK_LOG
  before insert on TINK_LOG
  for each row
declare
begin
  :new.LOG_ID:= S_T_THINK_LOG.NEXTVAL;  
end trg_t1;
查看完整回答
反對 回復 2019-03-18
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

不了解 thinkphpOracle 的結合。
樓主有沒有試過這個方法:【oracle的使用】在thinkphp5中使用oracle

查看完整回答
反對 回復 2019-03-18
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

oracle主鍵log_id 不能自動遞增
有兩個辦法:
1、使用oracle的自動增長序列
創建序列

create sequence S_T_THINK_LOG
increment by 1  //指定序列以1遞增,如果沒指定,默認值1會使用
start with 1        //由1開始計數
nomaxvalue     //不設置最大值
minvalue 1      //設置最小值1
cache 20        //預分配緩存大小為20
order
// 獲取下一個自增ID
public function getNextSeq(){ 
  $sql = "select S_T_THINK_LOG.nextval id from sys.dual";
  $result = $this->query($sql); 
  $nextId = $result[0]['id'];
  return $nextId;
}

function writelog($uid,$username,$description,$status)
{
    // 注意這里啦 
    // 注意這里啦 
    $data['log_id'] = $this->getNextSeq();
    
    $data['admin_id'] = $uid;
    $data['admin_name'] = $username;
    $data['description'] = $description;
    $data['status'] = $status;
    $data['ip'] = request()->ip();
    $data['add_time'] = time();
    $log = Db::name('think_log')->insert($data);

}

第二種,就是樓上說的 觸發器啦

create or replace trigger trg_TINK_LOG
  before insert on TINK_LOG
  for each row
declare
begin
  :think_log.LOG_ID:= S_T_THINK_LOG.NEXTVAL;  
end trg_t1;
查看完整回答
反對 回復 2019-03-18
  • 4 回答
  • 0 關注
  • 1401 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號