其后全部转为该格式
{
"status": "error",
"message": "错误标题",
"data": "错误信息",
"extra": {
"item1": "value1",
"item2": "value2"
}
}
status中的,成功 success 失败 error
其后全部转为该格式
{
"status": "error",
"message": "错误标题",
"data": "错误信息",
"extra": {
"item1": "value1",
"item2": "value2"
}
}
status中的,成功 success 失败 error
根据ACID一致性原则,事务对于要修改连续相关的多条数据,非常便于操作。如果执行过程中,任意一步不成功就回滚,保存原有数据。
在模型中需要引入:
use think\facade\Db;
在开始事务前创建事务,Db::startTrans() 执行使用 try 执行语句,成功则 Db::commit() ,若出现问题在catch结构 中执行Db::roollback()
Db::startTrans();
try(
//执行相关语句
Db::commit();
)catch(\Exception $e){
Db::rollback();
return null;
}
Db::startTrans();
try {
// 创建用户模型实例
$userModel = new UserModel();
// 创建订单模型实例
$orderModel = new OrderModel();
// 插入用户数据
$userModel->save(['name' => 'bbb', 'age' => 20]);
// 插入订单数据
$orderModel->save(['user_id' => $userModel->id, 'amount' => 100]);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
使用throw new \Exception(‘插入第二条数据失败’); 触发事务,捕获错误的信息$e->getMessage()
Db::startTrans();
try {
// 插入第一条数据
$result1 = Db::table('table1')->insertGetId($data1);
if (!$result1) {
throw new \Exception('插入第一条数据失败');
}
// 插入第二条数据
$result2 = Db::table('table2')->insert($data2);
if (!$result2) {
throw new \Exception('插入第二条数据失败');
}
// 提交事务
Db::commit();
return ['status' => 'success', 'message' => '数据插入成功'];
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
// 返回错误信息
return ['status' => 'error', 'message' => $e->getMessage()];
}
}
载入模型(设置prompt提示词 图片 设置)
设置图片格式
输出图片
use think\facade\Request;
$data = Request::only(['name','email','id']);
$data['id'] = $this->request->get('id/d');
$data['id'] = $this->request->get('sexy/d',1);//设置默认为1
标识符 | 描述 | 示例 |
---|---|---|
/s | 字符串类型转换 | $this->request->get('param/s') |
/a | 数组类型转换 | $this->request->get('param/a') |
/b | 布尔类型转换 | $this->request->get('param/b') |
/f | 浮点类型转换 | $this->request->get('param/f') |
/int | 整型转换(等同于 /d ) | $this->request->get('param/int') |
/bool 或 /boolean | 布尔类型转换 | $this->request->get('param/bool') 或 $this->request->get('param/boolean') |
$user = new User;
// post数组中只有name和email字段会写入
$user->allowField(['name','email'])->save($_POST);
//或者
$user = new User;
// 过滤post数组中的非数据表字段数据
$data = Request::only(['name','email']);
$user->save($data);
// 获取自增ID
echo $user->user_id;
多个条目插入 saveAll()
$user = new User;
$list = [
['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);
$user = User::create([
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
]);
echo $user->name;
echo $user->email;
echo $user->id; // 获取自增ID
$user = new User;
$list = [
['name'=>'thinkphp','email'=>'thinkphp@qq.com'],
['name'=>'onethink','email'=>'onethink@qq.com']
];
$user->saveAll($list);
$user = new User;
$list = [
['id'=>1, 'name'=>'thinkphp', 'email'=>'thinkphp@qq.com'],
['id'=>2, 'name'=>'onethink', 'email'=>'onethink@qq.com']
];
$user->saveAll($list);
#使用allowField来更新
$user->allowField(['name', 'email'])->save($_POST);
#传入前过滤,在控制器里面设置
$user = User::find(1);
// post数组中只有name和email字段会写入
$data = Request::only(['name','email']);
# $data为传入只保留name和email
$user->save($data);
User::update(['name' => 'thinkphp'], ['id' => 1]);
from camera import Camera, GrabMode, PixelFormat, FrameSize, GainCeiling
import time
cam = Camera(
data_pins=[45,47,14,40,5,42,41,39],
vsync_pin=21,
href_pin=38,
sda_pin=17,
scl_pin=18,
pclk_pin=48,
xclk_pin=-1,
xclk_freq=20000000,
powerdown_pin=46,
reset_pin=9,
pixel_format=PixelFormat.RGB565,
frame_size=FrameSize.QVGA,
jpeg_quality=90,
fb_count=2)
cam.init()
#f=open("a.jpg","wb")
#f.write(bytes(img))
#f.close()
while 1:
c=time.ticks_ms()
img = cam.capture()
time.sleep_ms(100)
e=time.ticks_ms()
print(1/((e-c)/1000),"FPS")
from machine import Pin, SPI
import st7789py as st7789
spi=SPI(1,baudrate=20000000, polarity=1, sck=Pin(6), mosi=Pin(7),miso=Pin(15))
tft=st7789.ST7789(spi,240,320,reset=Pin(3, Pin.OUT),cs=Pin(16, Pin.OUT),dc=Pin(10, Pin.OUT),backlight=Pin(11, Pin.OUT),)
tft.rotation(1)
tft.fill(st7789.GREEN)
from camera import Camera, GrabMode, PixelFormat, FrameSize, GainCeiling
import time
cam = Camera(
data_pins=[45,47,14,40,5,42,41,39],
vsync_pin=21,
href_pin=38,
sda_pin=17,
scl_pin=18,
pclk_pin=48,
xclk_pin=-1,
xclk_freq=20000000,
powerdown_pin=46,
reset_pin=9,
pixel_format=PixelFormat.RGB565,
frame_size=FrameSize.QVGA,grab_mode=GrabMode.LATEST, fb_count=2)
cam.init()
while 1:
c=time.ticks_ms()
img = cam.capture()
tft.blit_buffer(img, 0, 0, 240, 320)
e=time.ticks_ms()
print(1/((e-c)/1000),"FPS")