( ! ) Notice: Undefined index: DATETIME() in \FLEA\FLEA\Db\Driver\Mssql.php on line 305
Call Stack
# Time Memory Function Location
1 0.0016 58240 {main}( ) ..\index.php:0
2 0.0101 648648 FLEA::runMVC( ) ..\index.php:14
3 0.0149 937336 FLEA_Dispatcher_Auth->dispatching( ) ..\FLEA.php:817
4 0.0157 942624 FLEA_Dispatcher_Simple->_executeAction( ) ..\Auth.php:127
5 0.0172 1027792 Controller_Default->actionTest( ) ..\Simple.php:120
6 0.0172 1027792 FLEA->getSingleton( ) ..\Default.php:17
7 0.0262 1917824 FLEA_Db_TableDataGateway->FLEA_Db_TableDataGateway( ) ..\FLEA.php:423
8 0.0372 2338840 FLEA_Db_TableDataGateway->setDBO( ) ..\TableDataGateway.php:306
9 0.0372 2341400 FLEA_Db_TableDataGateway->_prepareMeta( ) ..\TableDataGateway.php:333
10 0.0375 2343080 FLEA_Db_Driver_Mssql->metaColumns( ) ..\TableDataGateway.php:2014
TableDataGateway.php:2014 如下
$this->meta = $this->dbo->metaColumns($this->qtableName);
问题还是出在取指定表(或者视图)的元数据上
查看 mssql.php文件里函数 function metaColumns($table)
错误提示是307行 Db\Driver\Mssql.php on line 307
Undefined index: DATETIME()
一般这个错误都是数组字符串KEY没有引号或没有定义
307 $field['simpleType'] = $typeMap[strtoupper($field['type'])];
明显问题在$typeMap这个数组,猜测是这个形式 $typeMap['DATETIME()'] , 理应是$typeMap['DATETIME']
再看这个函数前面部分的代码 是通过查询$this->META_COLUMNS_SQL 这个语句, 读取返回的行nvarchar(255) ,datetime()类似这样的字段属性
然后把字段名, 字段类型,长度,是否是主键,是否允许为空等信息记录到$field这个数组, 最后将这个数组整理为$retarr返回
而程序里对于nvarchar(255) , 这种形式的处理都是没有问题的
datetime() 这种长度没有注明的,在代码里面因为没有匹配正则没有处理, 就直接如下处理了
else {
$field['type'] = $type;
$field['maxLength'] = -1;
}
于是$field['type'] 就直接是datetime() , 后面$typeMap[strtoupper($field['type'])]; 这个地方当然就提示Undefined index: DATETIME()
因为typeMap数组中只定了 'DATETIME' => 'T'
于是在这个else语句里加一句,遇到()的去掉这个() 问题就解决了
else {
$field['type'] = $type;
$field['type'] = preg_replace('/\(\)/', "", $field['type']);
$field['maxLength'] = -1;
}
阅读(610) | 评论(0) | 转发(0) |