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