onunix
问题已经解决,如上所述:我的代码和写法是正确的,但是yii和oracle之间似乎有点不兼容,必须将本来是小写的,要变成大写,才能成功执行,这应该算作Yii的一个bug吧,希望后面解决。(莫非Yii无法识别oracle数据库中的大小写?统一转变成大写了?)
大概在构造sql时,Yii在数据库字段名称上加了引号,而在oracle中,如果这样,就会报错:
SQLSTATE[HY000]: General error: 928 OCIStmtExecute: ORA-00928: missing SELECT keyword
这个是我猜测的原因,估计是这样。
我基本上可以得到结论了:
正确的写法是:try { $pic=new abc; $data[‘f1’]=5; $data[’f2‘]="Dog"; $data[‘f3’]="Cat"; $data[’f4‘]="Dog"; $data[‘f5’]="Dog"; $pic->attributes=$data; $pic->save(); } catch (Exception $e) { echo $e->getMessage(); }
但是Yii和oracle之间的兼容性存在一些问题,导致会出现:
SQLSTATE[HY000]: General error: 928 OCIStmtExecute: ORA-00928: missing SELECT keyword
这个问题似乎无法解决,只能放弃了。
这个触发器不会影响的,因为触发器是修改这个主键,防止重复。
本来有扩展的swfupload,但是我使用时总是报错,最后只好放弃了,用了另外一个swfupload,可以传图片、视频,但是除了图片,还有一些其他的图片说明信息,图片说明信息得自己存入数据库。因此,存入图片信息就得自己写了。
我原来也想这个应该不会很难,不就是往数据库里插条记录嘛,没有想到还插不进去。确实是编译通过了,但是真正执行的时候发现抛出了异常:active record 由于不是新的, 无法被新增到数据库.
为什么会这样呢?
既然不是新的,我就new一个吧,于是,改成try { $pic=new abc; $data[f1]=5; $data[f2]="Dog"; $data[f3]="Cat"; $data[f4]="Dog"; $data[f5]="Dog"; $pic->attributes=$data; $pic->save(); } catch (Exception $e) { echo $e->getMessage(); }
没有再抛异常,但是转而查询oracle数据库,发现对应表是空的,记录没有插进去,这是怎么回事呢?
如果将
$data[f1]=5
改成$data[ ‘f1’]=5
反而会报错CDbCommand 无法执行 SQL 语句:SQLSTATE[HY000]: General error: 928 OCIStmtExecute: ORA-00928: missing SELECT keyword
。下面是表的结构:
create table abc ( f1 Number(8) PRIMARY KEY , f2 varchar(250) , f3 varchar(500) , f4 varchar(500) , f5 varchar(500) );
并添加了触发器,为f1赋值。
- onunix 回复了话题 为什么我写的文件找不到模型文件呢?
我知道了......
- onunix 回复了话题 为什么我写的文件找不到模型文件呢?
因为我新建立了一个目录,新写了些文件,因此肯定这些目录和文件没有和配置文件发生关系,因此就没有import这些类了,那我是否 include 这个配置文件就可以了? 我试着include了这个配置文件,还是不能用model文件,这是为什么呢?该如何解决呢?