代码之家  ›  专栏  ›  技术社区  ›  Shivam Sharma

OCI的异常行为

  •  0
  • Shivam Sharma  · 技术社区  · 7 年前

    我使用以下代码绑定变量 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);
    ?>
    

    作为总结:

    通过追加字符串并在 按名称绑定

    1 回复  |  直到 7 年前
        1
  •  0
  •   Christopher Jones    7 年前

    第一个例子是绑定 $bid 在每次迭代中,即重复使用相同的变量位置(内存地址)。请参阅中的相关示例“example#3 Binding with a foreach()loop” oci_bind_by_name() documentation :

    foreach ($ba as $key => $val) {
    
        // oci_bind_by_name($stid, $key, $val) does not work
        // because it binds each placeholder to the same location: $val
        // instead use the actual location of the data: $ba[$key]
        oci_bind_by_name($stid, $key, $ba[$key]);
    }
    
    推荐文章