在任何查询中可以使用fetchSql方法来获取查询的SQL而不是实际执行查询,比较下面两个查询:

ThinkPHP5.0获取查询SQL和返回PDOStatement对象

fetchSql是一个特殊的链式查询方法,只接受一个布尔值参数,表示是否获取sql语句,为true(默认为true)的时候表示当前的查询不会实际执行,而只会返回最终组装的SQL语句。在个别需要查看运行错误调试的情况下有所帮助。

返回PDOStatement对象。如果需要进行一些特殊的查询,并且需要利用PDO的一些查询特性,可以使用fetchPdo方法来返回PDOStatement对象而不是数据,以便进行下一步操作,下面是一个示例代码:

$pdo = Db::table('user')

->fetchPdo(true)

->field('name')

->where('id', 1)

->select();

$result = $pdo->fetchColumn();

使用了fetchPdo方法后无论是select还是find方法都是等效的,最终都只是返回PDOStatement对象,然后自己进行查询。无论是否有符合条件的数据,始终返回PDOStatement对象,然后可以调用PDOStatement对象的所有方法和属性。

V5.0.5+版本开始,查询类新增了getPdo方法直接返回PDOStatement对象,上面的代码可以改为:

$pdo = Db::table('user')

->where('id', 1)

->field('name')

->getPdo();

$result = $pdo->fetchColumn();

由于单独封装的原因,getPdo方法比使用fetchPdo性能更好。

相关文章