PHP oci_execute 不会返回任何内容,而它应该返回

问题描述 投票:0回答:1

我正在尝试在 PHP 中使用 OCI8 实现按条件查找方法,其中如果对象有参数集,则它应该查询所有记录,其中给定的参数与记录中的参数类似。但由于某种原因查询结果为空。

$id = $model->getId();

// create the criterias for each parameters
if (isset($id)) $crits[] = "ID = :id";
// ...

if (!empty($crits))
    //extend the sql with the criterias
    $sql .= " AND " . implode(" AND ", $crits);

    if (!$stmt = oci_parse($this->dataSource->getConnection(), $sql))
       throw new DataAccessException('parse ' . json_encode(oci_error($stmt)));
 
    // bind the required parameters
    if (isset($id) && !oci_bind_by_name($stmt, ':id', $id, -1))
       throw new DataAccessException('bind id ' . json_encode(oci_error($stmt)));
    // ...
    
    if (!oci_execute($stmt, OCI_DEFAULT))
       throw new DataAccessException('exec ' . json_encode(oci_error($stmt)));

    // handle result...
}

sql一定是正确的,我复制了代码组装的sql,手动绑定,得到了正确的结果,所以我认为问题应该出在绑定上。

我通过删除它们来检查错误处理是否不正确,并且绑定实际上并未发生,但事实并非如此,因为那时 oci_execute 将抛出错误。

由于无法检查绑定的sql,所以我陷入困境。

感谢您的帮助!

php oracle oci8
1个回答
0
投票

我发现了问题,$id的值存储为字符串,但它是数字,所以我必须像这样修改绑定:

oci_bind_by_name($stmt, ':id', $id, -1, is_numeric($id) ? SQLT_INT : SQLT_CHR);
© www.soinside.com 2019 - 2024. All rights reserved.