如何在OCI_BIND_BY_NAME中使用SQL结果

时间:2018-12-08 13:44:48

标签: php html oci

我是oci连接方面的新手。我想将SQL的结果用作要插入db中另一个表的数据。这是我的代码

      $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并将其插入到另一个表中,以及如何绑定?

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

  

警告:oci_bind_by_name():在216行的C:\ xampp \ htdocs \ SYSTEM \ admin-insert-lib.php中用于绑定的变量无效

在您的帮助下,确实会对我有很大帮助。我非常感谢。

2 个答案:

答案 0 :(得分:0)

我没有使用insert staffid,而是只使用where条件来更新col

 $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 :(得分:0)

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

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

要解决这些问题,请尝试以下操作:

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

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

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

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