如何使用 SQL 结果为 OCI_BIND_BY_NAME

How to use SQL result in OCI_BIND_BY_NAME

我是 oci 连接的新手。我想使用 SQL 的结果作为数据插入到数据库中的另一个 table 中。这是我的代码

      $search = "SELECT STAFF_ID FROM LIBRARIAN WHERE LIB_ID = $_id";
      $querysearch = oci_parse($link, $search) or die ("Query failed");
      oci_execute($querysearch);

       oci_result($querysearch, 'STAFF_ID');

      $sqllib="INSERT INTO LIBRARIAN(LIB_ID, LIB_NAME, LIB_CONTACT, STAFF_ID) VALUES (:id, :name, :contact, :staff)";
      $querylib=oci_parse($link, $sqllib) or die ("error insert Librarian");

      oci_bind_by_name($querylib, ':staff', $querysearch);
      oci_bind_by_name($querylib, ':id', $lib_id);
      oci_bind_by_name($querylib, ':name', $lib_name);
      oci_bind_by_name($querylib, ':contact', $lib_contact);

但是您知道如何使用从 select 语句中获得的员工 ID 并将其插入另一个 table 以及我应该如何绑定吗?

从这段代码中,我得到错误

Warning: oci_bind_by_name(): Invalid variable used for bind in C:\xampp\htdocs\SYSTEM\admin-insert-lib.php on line 216

有你的帮助真的对我帮助很大。我非常感激。

我没有使用 insert staffid,而是仅使用 where 条件更新列

 $sqllib="INSERT INTO LIBRARIAN(LIB_ID, LIB_NAME, LIB_CONTACT) VALUES (:id, :name, :contact)";
          $querylib=oci_parse($link, $sqllib) or die ("error insert Librarian");

          //oci_bind_by_name($querylib, ':staff', $try);
          oci_bind_by_name($querylib, ':id', $lib_id);
          oci_bind_by_name($querylib, ':name', $lib_name);
          oci_bind_by_name($querylib, ':contact', $lib_contact);

          oci_execute($querylib);

          $query = "UPDATE LIBRARIAN SET STAFF_ID = (SELECT STAFF_ID FROM LIBRARIAN WHERE LIB_ID = '$_id') WHERE LIB_ID = '$lib_id'";
          $Query1 = oci_parse($link, $query);
          oci_execute($Query1);

我看到两个可能导致此问题的问题:

  1. 需要调用 oci_fetch() 来读取查询结果行,以便 oci_result
  2. 可以访问它
  3. $querysearch 未设置为您的 $search SELECT 查询
  4. 返回的 STAFF_ID

要解决这些问题,试试这个:

oci_execute($querysearch);
oci_fetch($querysearch);
$staff_id = oci_result($querysearch, 'STAFF_ID');

然后,将此 $staff_id 传递到您的 INSERT 查询的 oci_bind_by_name 行中,如下所示:

oci_bind_by_name($querylib, ':staff', $staff_id);

编辑:我假设您的 $lib_id、$lib_name 和 $lib_contact 变量是在此代码段之外定义的,并且它们具有 :id 的有效值, :name, 和 :contact.