app:所有的代码都在此目录下,即开发项目的核心目录
config:配置目录,里面有所有的配置文件,包括视图配置,数据库配置,日志配置,路由配置以及整体的app项目配置等
extend:存放第三方方法(支付宝,微信,短信放在此处)
public:公用的,我们的项目会指向这里,所有的框架项目都是用index作为入口文件,该目录是专门对外访问的。在phpstudy配置时要把url指向到\public。
router:路由
runtime:缓存
vendor:核心文件,thinkphp的所有代码都在此处,包括下载的功能代码(用composer安装的所有代码)在url地址栏访问的时候,要带上public里面的index.php(入口文件),这个入口文件会引入composer的核心文件
执行完了以后会到app目录下面(相当于找到了app目录),因为都是mvc架构,url再下一层目录就不需要再写
controller或者model,直接写它们下面的文件名就行,不需要带后缀,比如controller下的index.php
后面直接引入\index就可以,因为文件名和类名是一一对应的
<?php
namespace app\controller;
use app\BaseController;
//! 2、引入Db门面类
use think\facade\Db;
//! 1、文件名和class名要保持一致
class Index extends BaseController
{
public function index()
{
//! 2.1、必须使用DB::来使用数据库操作
//! 2.2、查询表名,使用table方法
//! 2.3、操作数据库,需要多个功能,需要使用链式操作 ->
$ret = Db::table('oyk_user')->select();
//! 2.4、把tp返回的数据类型,改为数组
$array = $ret->toArray();
print_r($ret);
//! 2.5、mysql语句增加条件,where方法。条件参数,是可以多种传值方式
$ret = Db::table('oyk_user')->where('uid=3')->select();
// !这样传的uid用连接的方式别人可以注入,不安全
$uid = $_GET['uid'];
$ret = Db::table('oyk_user')->where('uid'.$uid)->select();
$ret = Db::table('oyk_user')->where('uid',$uid)->select();
$ret = Db::table('oyk_user')->where('uid','=',2)->select();
$ret = Db::table('oyk_user')->where('uid','=',2)->select();与上一行等同
$ret = Db::table('oyk_user')->where('uid','>',2)->select();
print_r($ret);
$ret = Db::table('oyk_user')->where('uid','>',2)->select()->toArray();
$new = $ret[0];
echo $new['nickname'];
//! 2.6、查询单条数据,可以使用find方法,否则必须在后面加入->toArray转换为数组
$ret = Db::table('oyk_user')->where('uid',2)->find();
print_r($ret);
// !在数据表里面,一行代表一个数组,多行代表二维数组
//! 2.7、field返回的字段名,返回值是数组
$ret = Db::table('oyk_user')->field('nickname')->where('uid',2)->find();
print_r($ret);
// 由于返回的是数组,所以想要直接显示名字,还需要加键名
print_r($ret['nickname']);
// 也可以
//! 2.8、value返回字段的值
Db::table('oyk_user')->where('uid',2)->value('nickname');
echo $ret;
//! 2.9、返回一列
$ret = Db::table('oyk_user')->column('nickname');
// 如果想拿手机号作为下标,则可以在column里面传入第二个值
$ret = Db::table('oyk_user')->column('nickname','phone');
print_r($ret);
// 3、添加数据用insert方法
//! 3.1、数据,使用数组的方式,key=value
//! 3.2、md5方法,是php自带的,把字符串进行md5加密,无法解密,非常安全,保护密码
$data = [
'nickname' => '小编1',
'phone' => '18811119999',
'password' => md5(123456),
'add_time' => time(),
'last_time' => time()
];
$ret = Db::table('oyk_user')->insert($data);
print_r($ret);
//! 4、updata 修改数据库的数据
$data = [
'password' => md5('phpcn'),
'last_time' => time()
];
$ret = Db::table('oyk_user')->where('uid',19)->update($data);
print_r($ret);
//! 5、删除 在程序员中,是不允许删除的,可以更改状态,或者使用其它的字段代替删除功能
$ret = Db::table('oyk_user')->where('uid',19)->delete();
print_r($ret);
//! 6、query方法,参数直接写mysql语句,单引号容易冲突,尽量用双引号
// mysql原生语句,单引号和双引号自行处理
$ret = Db::query("SELECT * FROM `oyk_user` WHERE `uid` > 3 AND `uid` < 7");
print_r($ret);
//! 7、execute方法,原生mysql操作,添加和修改
$ret = Db::execute("INSERT INTO `oyk_user` VALUES (null, '小编2', '18811119999', 'e10adc3949ba59abbe56e057f20f883e', 1, 11, 1659283200, '', 1660896721, '127.0.0.1');");
print_r($ret);
//! 8、添加多条数据insertAll
$data =[
[
'nickname' => '小编3',
'phone' => '18811113333',
'password' => md5(123456),
'add_time' => time(),
'last_time' => time()
],
[
'nickname' => '小编4',
'phone' => '18811114444',
'password' => md5(123456),
'add_time' => time(),
'last_time' => time()
],
[
'nickname' => '小编5',
'phone' => '18811115555',
'password' => md5(123456),
'add_time' => time(),
'last_time' => time()
],
];
$ret = Db::table('oyk_user')->insertAll($data);
print_r($ret);
//! 9、insertGetId添加数据后,返回自增id
$data = [
'nickname' => '小编6',
'phone' => '18811116666',
'password' => md5(123456),
'add_time' => time(),
'last_time' => time()
];
$ret = Db::table('oyk_user')->insertGetid($data);
print_r($ret);
if(empty($ret)){
echo '失败';
}else{
echo '成功';
}
$ret = Db::table('oyk_user')
->where('uid',20)
->delete();
print_r($ret);
//! 10、软删除useSoftDelete,数据知识用字段代表删除了,但是还存在数据表中
// 软删除其实还本质上还是执行的update的操作,虽然使用了delete方法,但其实并没有删除掉
$ret = Db::table('oyk_user')
->where('uid',21)
->useSoftDelete('status',2)
->delete();
print_r($ret);
}
}