我有一个使用pdo_mysql
作为学说驱动程序与数据库进行通信的网站,一切都很好。
现在,我正在尝试使用sqlite
作为数据库驱动程序为我的存储库和类编写功能单元测试。但是我的一个查询是使用USE INDEX(index)
,看起来sqlite
不喜欢该语法。
是否有一种方法可以修改所有查询以在sqlite
进行执行之前从查询中删除USE INDEX(...)
字符串?
,所以我想我可以回答自己的问题。
我创建一个自定义连接类,从默认连接延伸,然后覆盖executeQuery()
函数
class TestConnection extends Connection {
public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null)
{
$query1 = preg_replace('/USE INDEX(S+)/', '', $query);
return parent::executeQuery($query1, $params, $types, $qcp);
}
}
然后定义参数以创建SQLite连接,例如此
private $dbParams = [
'driver' => 'pdo_sqlite',
'memory' => true,
'wrapperClass' => 'SgTestDatabaseTestConnection'
];
,所有查询在执行之前都会更改