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

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

何時在 PHP 中使用 OCI_B_INT?

何時在 PHP 中使用 OCI_B_INT?

PHP
智慧大石 2022-06-17 14:47:21
我有一個具有這種結構的 Oracle 表:column             type           key---------------------------------------------id                 integer        primary keyuser_id            integer        foreign keycolony_id          number(14)     foreign keylast_upd_username  varchar2(50)last_upd_date      date我沒有創建表格,但我認為colony_id應該integer也是 - 不number (現在無論如何都太晚了)。我有一個在此表中插入多行的查詢:$colonies = array_map("intval", $post['colonies']);# Assign colonies to $user_id$sql = "INSERT INTO user_colonies (    id,    user_id,    colony_id,    last_upd_username,    last_upd_date  ) VALUES (    user_colonies_seq.NEXTVAL,    :user_id,    :colony_id,    :username,    sysdate  )";$stmt = oci_parse($conn, $sql);oci_bind_by_name($stmt, ":user_id", $user_id);oci_bind_by_name($stmt, ":colony_id", $colony);oci_bind_by_name($stmt, ":username", $username);foreach($colonies as $colony) {  $r = oci_execute($stmt, OCI_DEFAULT);  if(!$r) {    $e = oci_error($stmt);    $result['err'][] = $e['message'];  }}$result['msg'] = 'success';oci_commit($conn);oci_free_statement($stmt);echo json_encode($result);這種工作因為查詢運行良好($e['message'])總是null。但是,當我查看插入的行時,colony_id它們沒有任何意義,它們只是一堆從 1 到 9 的隨機整數,而我期待實際的 ID(應該是數千)。我能夠通過改變使它工作oci_bind_by_name($stmt, ":colony_id", $colony);進入oci_bind_by_name($stmt, ":colony_id", $colony, -1, OCI_B_INT);通過使用OCI_B_INT,使用正確的 ID 并且一切正常。我不明白何時以及如何使用該標志,因為在沒有標志的情況下綁定$user_id到":user_id"工作正常。我能看到的唯一區別是數據類型(integervs number(14))。
查看完整描述

1 回答

?
RISEBY

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

這真的不是OCI_B_INTflag的問題。這里真正的罪魁禍首是maxlength參數。


您必須指定maxlength何時使用 OUT 綁定,以便 PHP 分配足夠的內存來保存返回的值。


maxlength對于 IN 綁定,如果使用 PHP 變量的不同值多次重新執行語句,建議設置長度。否則 Oracle 可能會將數據截斷為初始 PHP 變量值的長度。如果您不知道最大長度是多少,請oci_bind_by_name()在每次調用之前使用當前數據大小重新oci_execute()調用。綁定不必要的大長度將對數據庫中的進程內存產生影響。


foreach($colonies as $colony) {

  oci_bind_by_name($stmt, ":colony_id", $colony, -1, OCI_B_INT);

  $r = oci_execute($stmt, OCI_DEFAULT);

}


查看完整回答
反對 回復 2022-06-17
  • 1 回答
  • 0 關注
  • 119 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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