[BUG反饋]onethink1.1含1.0 資料庫還原BUG

發表於2019-05-11
環境:
Windows Server 2003 Enterprise Edition Service Pack 1
IIS6 + fastcgi +PHP 5.3 (5.3.29) Non Thread Safe +MYSQL 5.0.22-community-nt

PHP.ini
short_open_tag = On
display_errors = On
magic_quotes_gpc = On
extension_dir = "E:/isapi/php5.3/ext"
fastcgi.impersonate = 1
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
date.timezone = Asia/Shanghai

        



BUG表現描述:
http://127.0.0.1/admin.php?s=/Database/import/time/1414865063.html&part=1&start=0
:(
SQLSTATE[HY000]: General error
錯誤位置

FILE: E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\Db\Driver.class.php  LINE: 280
TRACE

#0 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\Db\Driver.class.php(280): PDOStatement->fetchAll(2)
#1 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\Db\Driver.class.php(169): Think\Db\Driver->getResult()
#2 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\OT\Database.class.php(192): Think\Db\Driver->query('-- ------------...')
#3 E:\wwwroot\onethink_1.1\wwwroot\Application\Admin\Controller\DatabaseController.class.php(277): OT\Database->import('0')
#4 [internal function]: Admin\Controller\DatabaseController->import('1414865063', '1', '0')
#5 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\App.class.php(154): ReflectionMethod->invokeArgs(Object(Admin\Controller\DatabaseController), Array)
#6 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\App.class.php(194): Think\App::exec()
#7 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\Library\Think\Think.class.php(120): Think\App::run()
#8 E:\wwwroot\onethink_1.1\wwwroot\ThinkPHP\ThinkPHP.php(97): Think\Think::start()
#9 E:\wwwroot\onethink_1.1\wwwroot\admin.php(40): require('E:\wwwroot\onet...')
#10 {main}

        

還有另一個錯誤,備份INSERT語句VALUES值沒做換行轉義處理,
當INSERT INTO語句有 ;換行
第191行 preg_match('/.*;$/', trim($sql))
判決完整SQL成立,就會執行殘缺的SQL

INSERT INTO `onethink_document_article` VALUES ('1', '0', '<h1>
        OneThink1.1開發版釋出&amp;nbsp;
</h1>
...............
', '', '0');


修復:
第156行
$sql = "INSERT INTO `{$table}` VALUES ('" . str_replace(array("\r","\n"),array('\r','\n'),implode("', '", $row)) . "');\n";
第192行query改成execute
if(false !== $db->execute($sql)){


修復檔案:
ThinkPHP.Library.OT.Database.c(2.76KB, 下載次數: 8)
回覆
不錯,贊
評論
唉,手冊也沒人更新啊
有新的改變,手冊也改啊
要不然自己琢磨還是很費時間的
一個做貢獻,全社會都會進步
要是每個人都琢磨同一件事,社會前進的腳步會慢很多!
。。。
評論
可以直接在git裡面pull,呵呵
評論
已經修正
評論

相關文章