|
|
BUG描述:
当源数据库和目标数据库字符编码不一致时,数据导入在“导入条件”里如果写有中文,就会出现错误:查询不到数据或报代码错误(打开报错情况下)
举例:
我有一个Access数据库,编码GBK,DT用的UTF8版。在数据导入时,我在导入条件里填写:type="IT行业"就会出现查询不到数据,页面一片空,打开报错(error_reporting(E_ALL))的情况下,会报错。
解决:
将admin/data.inc.php156行左右的[ol]$result = $sc->query("SELECT * FROM {$db_table} WHERE $db_key>$lastid $db_condition LIMIT 0,1");[/ol]复制代码替换为[ol]$result = $sc->query("SELECT * FROM {$db_table} WHERE $db_key>$lastid ".convert($db_condition, $CFG['charset'], $db_charset)." LIMIT 0,1");[/ol]复制代码
205行
[ol]$r = $sc->get_one("SELECT min($db_key) AS fid FROM {$db_table} WHERE $db_key>$lastid $db_condition");[/ol]复制代码
替换为
[ol] $r = $sc->get_one("SELECT min($db_key) AS fid FROM {$db_table} WHERE $db_key>$lastid ".convert($db_condition, $CFG['charset'], $db_charset));[/ol]复制代码
209行
[ol] $r = $sc->get_one("SELECT max($db_key) AS tid FROM {$db_table} WHERE $db_key>$lastid $db_condition");[/ol]复制代码
替换为
[ol]$r = $sc->get_one("SELECT max($db_key) AS tid FROM {$db_table} WHERE $db_key>$lastid ".convert($db_condition, $CFG['charset'], $db_charset));[/ol]复制代码
215行
[ol]$result = $sc->query("SELECT * FROM {$db_table} WHERE $db_key>$lastid AND $db_key>=$fid $db_condition ORDER BY $db_key LIMIT 0,$num ");[/ol]复制代码
替换为
[ol]$result = $sc->query("SELECT * FROM {$db_table} WHERE $db_key>$lastid AND $db_key>=$fid ".convert($db_condition, $CFG['charset'], $db_charset)." ORDER BY $db_key LIMIT 0,$num ");[/ol]复制代码
另外一个问题:
include/db_access.class.php这个文件也存在多个比较小的问题。比如32行[ol]$query = $this->conn->Execute($sql);return $this->limit($query, $offset, $pagesize);[/ol]复制代码未进行$query是否有效,是否为空的情况下就调用了limit方法,导致程序报错崩溃。
[ 本帖最后由 xydream 于 2010-5-15 10:30 编辑 ] |
|