如何使用 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);
我看到两个可能导致此问题的问题:
- 需要调用
oci_fetch()
来读取查询结果行,以便 oci_result
可以访问它
$querysearch
未设置为您的 $search
SELECT 查询 返回的 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.
我是 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);
我看到两个可能导致此问题的问题:
- 需要调用
oci_fetch()
来读取查询结果行,以便oci_result
可以访问它
$querysearch
未设置为您的$search
SELECT 查询 返回的 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.