之前有人在BAE使用Discuz遇到问题,安装完之后登录的时候,遇到No Database Selected这个错误:
UCenter info: MySQL Query Error
SQL:SELECT value FROM [Table]vars WHERE name='noteexists1'
Error:No Database Selected
Errno:13003
截个图:
“No Database Selected”应该是没有选定数据库,通常这是在连接MySQL的时候会做的动作。
看了一下Discuz的代码(我看的是 http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip ,也可以在 http://www.discuz.net/thread-3570835-1-1.html 里找到 ),感觉是 uc_client/model/base.php 里的 base:init_db() 函数有问题。连接数据库的动作在第 79 行:
$this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, '', UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);
这里的第4个输入参数应该就是数据库的名字,但是原始的代码里这里是个空字符,即 '' ,明显是有问题的。把这个空串替换成 UC_DBNAME 之后问题解决了。
后来又搜了一下,发现其实百度经验上对这里是有描述的:
http://jingyan.baidu.com/article/eae0782780f4df1fec5485f5.html
http://jingyan.baidu.com/article/08b6a591ae339214a809223e.html
里面说到“修改upload/uc_client/model/base.php,在第74行加上UC_DBNAME”(里面估计是说的旧版本,所以行号不一样),应该就是针对这个问题的,截图的内容也能对上。
但是这里面的说法有一点误导,因为它说的是“加上”UC_DBNAME,而没有明确说把“把第4个参数替换成UC_DBNAME”,因此会让人觉得是原始的代码里漏了一个参数。如果这里真“加”一个参数上去,还是会有问题的。。。
总之,这里只要把第4个参数 '' 替换成 UC_DBNAME 就能解决这个问题。
棒棒哒