数据库操作

终于写到数据库操作。xts框架只支持MySQL一种关系型数据库,对PostgreSQL和sqlite等常用库没有提供支持。我会分三个部分来介绍数据库的相关内容,包括基本的SQL查询,ORM功能以及ORM的Relation-Load功能。

配置MySQL数据库

MySQL基本配置如下

'db' => array(
    'class' => '\\xts\\Query',
    'singleton' => true,
    'conf' => array(
        'host' => 'localhost',
        'port' => 3306,
        'schema' => 'xts',
        'charset' => 'utf8',
        'user' => 'xts',
        'password' => 'xtstest',
        'persistent' => false,
    ),
),

这个配置应该放在component配置中,db是作为组件ID。xts\Query类提供基本的数据库操作功能。可以在conf中指定数据库的主机名、端口号、数据库名、连接字符集、用户名、密码还有是否启用长连接。

执行SQL语句

可以使用xts\Query类的query方法可以运行一条SQL语句并返回执行结果。

X::db()->query(
    "Select * From `user` Where `id`=:id",
    array(':id' => 1)
);

query方法会返回整个结果集,相当于PDO的fetchAll方法。如果SQL运行时发生错误,会抛出xts\OrangeException异常。

xts\Query类另有一个execute方法来运行一条SQL语句。此方法不支持变量绑定,只能书写完整的SQL语句字串。这个方法会返回操作影响的行数,比较适合用来执行Insert等无需返回结果集的函数。

取得上次Insert语句的自增长ID

xts\Query类的getLastInsertId方法可以取得上次插入语句的生成的自增ID。这个方法符合属性getter的格式,也可以以属性的方式访问它。

X::db()->execute(
    "Insert Into `user` (`id`, `name`, `email`) Values ( NULL, 'foobar', 'foobar@example.com'"
);
$id = X::db()->lastInsertId;

SQL Builder

xts提供SQL Builder来帮助书写SQL语句,它会自动做一些检查,不过功能比较弱,没有支持Join语句,所以无法取代Query。

在select的时候,SqlBuilder支持自动生成Select字段表

$sb = new \xts\SqlBuilder(X::db());
$sb->select('id', 'name', 'email')
    ->from('user')
    ->where('name like :n', array(':n'=>'Smit%');
$result = $sb->query();

标签: xts

添加新评论