首页 > thinkPHP 为什么这个不自动换库??

thinkPHP 为什么这个不自动换库??

错误提示:
SQLSTATE[HY000] [1049] Unknown database 'ybdbfruitshop'
//这是我的 Model 文件,已经改了 库名 了:
<?php
namespace Common\Model;
use Think\Model;

class classoneModel extends Model
{
    protected $dbName = 'ybdbcjd';  //虽然改了库名了,但是没有调用这个!
    protected $trueTableName = 'classone';
    protected $_map = array
    (
        '姓名'=>'name',
    );

    function say($str = 'i am in namespace Home\Model <br>')
    {
        echo $str;
    }

}
我调用的上面的类文件:

<?php
namespace Home\Controller;
use Think\Controller;
use Think\Model;


public function create1()
{

    $use = D('classone');
    $_POST["time"]= date("Y-m-d H:i:s",Time());

    $use->create();
    $use->add();

    $this->success('插入成功', 'lastRow',2);
}
//配置文件
'DB_TYPE'=>'mysql', 
'DB_USER'=>'root',
'DB_PWD'=>'',
'DB_PREFIX'=>'',
'DB_DSN'=>'mysql:host=localhost;dbname=ybdbfruitshop;charset=UTF8',//这里 虽然是 ybdbfruitshop ,但是我在 model 类文件已经改了库名了..不是应该覆盖吗?

http://document.thinkphp.cn/manual_3_2.html#switch_database
手册上写的很清楚了


你需要在配置问提前配置好两个完整的数据库连接。比如:

'DB_CONFIG1' = array(
    'db_type'  => 'mysql',
    'db_user'  => 'root',
    'db_pwd'   => '1234',
    'db_host'  => 'localhost',
    'db_port'  => '3306',
    'db_name'  => 'thinkphp'
),
//数据库配置2
'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp';

你要是嫌费劲,你可以复制下数组,然后只修改其中的数据库名字,但是只配置数据库名是不行的。


另外你也可以通过在模型里重定义

//在模型里单独设置数据库连接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
    protected $connection = array(
        'db_type'  => 'mysql',
        'db_user'  => 'root',
        'db_pwd'   => '1234',
        'db_host'  => 'localhost',
        'db_port'  => '3306',
        'db_name'  => 'thinkphp',
        'db_charset' =>    'utf8',
    );
}

或者

//在模型里单独设置数据库连接信息
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
    //或者使用字符串定义
    protected $connection = 'mysql://root:1234@localhost:3306/thinkphp#utf8';
}

或者

namespace Home\Model;
use Think\Model;
class InfoModel extends Model{
    //调用配置文件中的数据库配置1
    protected $connection = 'DB_CONFIG2';
}

最后补充下:

class classoneModel extends Model
{
    protected $dbName = 'ybdbcjd'; 
}

中的$dbName是干什么的。
它是用来操作同一个mysql账户下的另外数据库的,在本问题中,如果你的同一个mysql账户中确实有这个数据库,并且有相应权限的话,是可以正确执行的。生成的类似sql语句为:

select * from ybdbcjd.table

这并非thinkphp自身意义上的切换数据库,而是mysql自身的跨数据库操作语法,局限性较大,不建议使用。

【热门文章】
【热门文章】