一、连接数据库
在ThinkPHP框架中,它为我们提供了非常方便的方式连接数据库,我们可以通过简单的修改配置文件就可以连接上我们的mysql/oracle/SQL Server。
在我们的PHP中,大多是和Mysql进行配合使用的,所以我这里都是以Mysql为例的。安装好TP之后,我将我的目录从新调整成了这样
如果跟我一样入门且有兴趣的小伙伴,可以将自己的目录调整和我的一样,一步一步走下去,希望对你有所帮助
首先我们打开conf/database.php,解释一下里边的几个重要参数
修改好数据库的配置之后,我们进入app/index/controller/Index.php中,打印一下数据库配置看一下
进行了以上的配置之后,我们就能够在控制器中随意的使用我们的数据库
我们还可以通过,给connect传递数组参数的方式,来链接数据库
$res = Db::connect([
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'course',
'username' => 'root',
'password' => 'root_pw',
'hostport' => '3306',
'charset' => 'utf8',
]);
我们还可以通过dsn的方式进行连接
$res = Db::connect(“mysql://root:root@127.0.0.1:3306/course#utf8”);
解释一下每一个参数的含义:
在://之前的是数据库类型
后边依次就是 数据库名 数据库密码 数据库地址 端口号 数据库名 字符集
这个connect还接收一种配置:
$res = Db::connect( ‘db_congig01’);
如果我们的应用配置文件,或者我们当前的模块配置文件中存在这个配置,那么他就会自动读取这个配置,比如我现在在config.php中添加一个db_congig01配置
这种方式也能连接数据库(大家可以将数据库名修改一下,然后通过dump($res)打印一下连接的配置信息,就可以看见配置信息)
二、数据库的查询操作
首先我们要创建一个数据库,我这里使用的可视化mysql工具是navicat,创建一个course数据库,然后在该数据库下创建一个shulv_user表
创建好表之后,我们就来敲一下在控制器中对表进行操作的几种方法
1,通过query()的方式
现在我们在app/index/controller/index.php输入如下代码
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
$res = Db::query("select * from shulv_user where id=?", [1]);
dump($res);
}
}
$res = Db::execute("insert into shulv_user set username=?,password=?,email=?", [
'shulv',
md5('shulv'),
'[email protected]'
]);
dump($res);
执行结果是1,表示有一条记录被影响,下面我们刷新一下数据库可以看到
3,通过Db类中的select()方法(返回表中所有记录,返回结果是一个二维数组。如果结果不存在,返回的会是一个空数组)
$res = Db::table('shulv_user')->select();
dump($res);
4,通过Db类中的find()方法(返回一条记录,一般情况下会添加where条件,否则返回的是正序排列后的第一条记录,如果查询的记录不存在,返回的是NULL)
$res = Db::table('shulv_user')->find();
dump($res);
5,通过Db类中的value()方法(返回一条记录,并且是记录中的某个字段值,一般也是有where条件的,如果没有则返回正序排列后的第一条记录,如果查询的记录不存在,返回的是NULL)
$res = Db::table('shulv_user')->value('username');
dump($res);
6,通过Db类中的column ()方法(返回一个一维数组,数组中的value值就是我们要获取的列的值,如果不存在,返回的是一个空数组)
$res = Db::table('shulv_user')->column('username');
dump($res);
它还可以传递第二个参数,如果存在第二个参数,就返回这个数组并且用第二个参数的值作为数组的key值
$res = Db::table('shulv_user')->column('email','username');
dump($res);
总结:由上边我们可以知道,select()和column()返回的是多条记录,当查询的记录不存在时,返回空数组。find()和value()返回的是一条记录,如果查询的记录不存在则返回NULL
前边我们说的都是Db::table(),那么我们再说一个Db::name(),使用Db::table()时,我们传递的表名需要添加前缀,但是使用Db::name(),我们不需要添加表前缀。
另外,在Tp中,它为我们提供了一个助手函数
db(‘表名’)->select()(这里的表名不需要添加前缀)前边使用的find()、column()等函数,都可以使用这个助手函数的方式来使用
Db类和db()助手函数的区别就是:Db类使用的是单例模式(前边的博客有说到单例模式,不知道的小伙伴可以去看一下http://blog.csdn.net/self_realian/article/details/78249287)。而db()助手函数,会在每次调用的时候都实例化,但是,如果我们不想让他每次都实例化的时候,我们可以给它传递第三个参数false db(‘表名’,[],false)