执行SQL
更新时间:2025年3月5日 03:01
浏览:836
数据库类 提供了 query 和 execute 两个方法用于执行指定的 SQL语句。
query 方法
public function query(string $sql, array $bind = null, array $prepareOptions = null): int
参数:
- string $sql - 要执行的SQL语句
- array $bind - 占位符替换数据
- array $prepareOptions - 预编译选项
返回值:
- int - 影响的行数,如果数据无变化,则返回0,失败时抛出异常
query 方法用于一次性的确定的操作(update 或 delete),
$db = Be::getDb();
$sql = 'UPDATE ' . $db->quoteKey('user') . '
SET ' . $db->quoteKey('age') . ' = 18
WHERE ' . $db->quoteKey('sex') . ' = ' . $db->quoteValue('女');
$db->query($sql);
// 占位符
$sql = 'DELETE FROM ' . $db->quoteKey('user') . '
WHERE ' . $db->quoteKey('age') . ' < ?
AND ' . $db->quoteKey('sex') . ' = ?';
$db->query($sql, [18, '女']);
execute 方法
public function execute(string $sql, array $bind = null, array $prepareOptions = null)
参数:
- string $sql - 要执行的SQL语句
- array $bind - 占位符替换数据
- array $prepareOptions - 预编译选项
返回值:
- \PDOStatement | \Swoole\Database\PDOStatementProxy - 结果集
excute 可使用结果集做更复杂的操作,如游标遍历
$db = Be::getDb();
$sql = 'SELECT * FROM ' . $db->quoteKey('user') . '
WHERE ' . $db->quoteKey('sex') . ' = ' . $db->quoteValue('女');
$statement = $db->execute($sql);
// 或通过 占位符 查询
$sql = 'SELECT * FROM ' . $db->quoteKey('user') . '
WHERE ' . $db->quoteKey('age') . ' < ?
AND ' . $db->quoteKey('sex') . ' = ?' ;
$statement = $db->execute($sql, [18, '女']);
$users = $statement->fetchAll(\PDO::FETCH_OBJ);
$statement->closeCursor();
另外 excute 支持先编译SQL,再批量注入数据
$db = Be::getDb();
$db->startTransaction();
try {
$sql = 'UPDATE ' . $db->quoteKey('user') . '
SET ' . $db->quoteKey('age') . ' = ?
WHERE ' . $db->quoteKey('username') . ' = ?';
$db->prepare($sql);
$data = [
[40, '大哥'],
[35, '二哥'],
[30, '三哥'],
[25, '四哥'],
];
foreach($data as $x) {
$db->execute(null, $x);
}
$db->commit();
} catch (\Exception $e) {
$db->rollback();
}