Swoft SQL与事务

Swoft提供使用原生SQL查询,主要使用Swoft\Db类中方法。

原生SQL

使用Db类的静态方法query()方法,执行原生SQL语句,获取多为数组结果。

query(
  string $sql, 
  array $params = [], 
  string $instance = Pool::INSTANCE, 
  string $className = '', 
  array $resultDecorators = []
): ResultInterface

参数

  • string $sql 原生SQL语句
  • array $params 可选,参数列表
  • string $instance 可选,连接池对象
  • string $className 可选,类名
  • array $resultDecorators 可选,结果加密器

示例1:拼接原生SQL

$id = 40;

$sql="SELECT * FROM user WHERE id={$id}";

$query = Db::query($sql);
$result = $query->getResult();
var_dump($result);

注意返回值是一个二维数组

array(1) {
  [0]=>
  array(5) {
    ["id"]=>
    string(2) "40"
    ["name"]=>
    string(10) "1556193807"
    ["age"]=>
    string(2) "61"
    ["sex"]=>
    string(1) "1"
    ["description"]=>
    string(14) "this is a test"
  }
}

示例2:参数绑定

使用?替换参数

$id = 40;
$sql="SELECT * FROM user WHERE id=?";

$params = [];
$params[] = $id;
$query = Db::query($sql, $params);
$result = $query->getResult();
var_dump($result);

使用:加上字段名称的方式

$id = 40;

$sql="SELECT * FROM user WHERE id=:id";

$params = [];
$params["id"] = $id;

$query = Db::query($sql, $params);
$result = $query->getResult();
var_dump($result);

事务

当开启事务后,事务之间的所有操作都使用的是同一个连接,不能使用并发连接。

关于事务及其相关的概念,可参见《MySQL事务》

//开启事务
Db::beginTransaction();

$user = new User();
$user->setName(strval(time()));
$user->setSex(mt_rand(0, 1));
$user->setAge(mt_rand(1, 100));
$user->setDesc("this is a demo");
$query = $user->save();
$uid = $query->getResult();

$count = new Count();
$count->setUid($uid);
$count->setFollows(mt_rand(1, 100));
$count->setFans(mt_rand(1, 100));
$query = $count->save();
$cid = $query->getResult();
var_dump($cid);//int(51)

//提交事务
Db::commit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值