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();