【发布时间】:2018-11-16 06:33:27
【问题描述】:
我使用以下代码使用oci_bind_by_name 绑定变量,但即使有多行可用,也只返回单行。
<?php
$queryArr = array(11423,24242,2463,23434);
$sqlarr = array();
for ($i = 0; $i < count($queryArr); $i++) {
array_push($sqlarr, ":B$i");
}
$sqlstr = implode(",", $sqlarr);
$sql = "SELECT COL1, COL2, STATUS FROM TAB1 WHERE P_KEY = :USR_ID AND S_COL IN (" . $sqlstr . ") ORDER BY STATUS";
$this->sth = oci_parse($this->con, $sql);
oci_bind_by_name($this->sth, ":USR_ID", $usrid);
for ($i = 0; $i < count($queryArr); $i++) {
$bid = $queryArr[$i];
oci_bind_by_name($this->sth, ":B$i", $bid);
}
oci_execute($this->sth);
?>
花了 3 个小时在代码中找到错误后,我发现问题出在 OCI_BIND_BY_NAME 上。我将上面的代码更改如下,现在我得到了所有的行。
<?php
$queryArr = array(11423,24242,2463,23434);
$sqlarr = array();
for ($i = 0; $i < count($queryArr); $i++) {
array_push($sqlarr, ":B$i");
}
$sqlstr = implode(",", $sqlarr);
$sql = "SELECT COL1, COL2, STATUS FROM TAB1 WHERE P_KEY = :USR_ID AND S_COL IN (" . $sqlstr . ") ORDER BY STATUS";
$this->sth = oci_parse($this->con, $sql);
oci_bind_by_name($this->sth, ":USR_ID", $usrid);
for ($i = 0; $i < count($queryArr); $i++) {
//Changed code --START--
$bindName = ":B".$i;
oci_bind_by_name($this->sth, $bindName, $queryArr[$i]);
//Changed code --END--
}
oci_execute($this->sth);
?>
有人可以解释一下这背后的原因吗?
总结一下:
当通过附加字符串创建变量并在
OCI_BIND_BY_NAME中使用它时,它工作正常,但是当我直接在函数中附加字符串时,它不能正常工作。此外,它没有给出任何错误消息。它正在执行,但只返回单行。
【问题讨论】:
-
oci_bind_by_name() 不就是这样工作的吗? «将 PHP 变量 绑定到 Oracle 占位符»。也许它正在返回
false;你不检查那个。
标签: php oracle oracle-call-interface