为了账号安全,请及时绑定邮箱和手机立即绑定

何时在 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 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信