【问题标题】:Role-Based Access Control - RBAC YII V1 ORACLE基于角色的访问控制 - RBAC YII V1 ORACLE
【发布时间】:2015-02-16 15:01:15
【问题描述】:
我正在使用 yii v1 和 oracle 数据库开发应用程序,当我想使用 RBAC (checkAccess) 时,我收到以下错误:
CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: 一般错误: 1405 OCIStmtFetch: ORA-01405: fetched column value is NULL
(/tmp/pdo/PDO_OCI-1.0/oci_statement.c:446)。执行的 SQL 语句是:SELECT *
来自“AUTHITEM”
WHERE NAME=:NAME
桌子已经摆好了
我该如何解决这个问题?
有什么想法吗?
先谢谢了!
【问题讨论】:
标签:
php
oracle
yii
pdo
authorization
【解决方案1】:
这是pdo_oci驱动的问题,你可以使用这个扩展Yii的PHPPDO extension来避免这个错误。在 protected/extensions 下提取它,然后在 protected/config/main.php 将以下内容添加到您的数据库连接:
db'=>array(
'class'=>'application.extensions.PHPPDO.CPdoDbConnection',
'pdoClass' => 'PHPPDO',
【解决方案2】:
由于 Ali 提供了错误修复的链接,您会得到 Oracle NULL,它不能转换为 php NULL。
pdo_oci 在从 lob 字段中获取时不会将 oracle 空值转换为 php 空值。
所以,我建议先做一个 NULL 检查,然后根据结果请求角色:
SELECT * FROM WHERE NAME 为空或NAME=''
另一种选择是使用 AR findBySQL() 方法获取数据,其中使用 NVL() Oracle 函数。
我认为的第三个选项是将您的角色数据库表限制为 NOT NULL 值。