我是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中用于绑定的变量无效
在您的帮助下,确实会对我有很大帮助。我非常感谢。
答案 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)
我看到了两个可能导致此问题的问题:
oci_fetch()
调用才能读取查询结果行,以便oci_result
可以访问$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具有有效值。