开发文档 v2.x

执行SQL

更新时间:2022年8月27日 02:27 浏览:62

数据库类 提供了 query 和 execute 两个方法用于执行指定的 SQL语句。

  • query - 返回影响的行数,用于一次性操作
  • execute - 会返回结果集,可做更复杂的操作,如游标遍历

 

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

 

导航