Я использовал следующий код для привязки переменных, используя 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
, она работает нормально, но когда я непосредственно добавляю строку в функцию, она работает неправильно. Кроме того, это не дает никакого сообщения об ошибке. Он выполняется, но возвращает только одну строку.