
Yii2 是一个 PHP 框架它提供了很多工具和组件来帮助开发者更快地构建 Web 应用程序。在 Yii2 中DAO数据访问对象和 ActiveRecord 是两种处理数据库操作的方法。DAO数据访问对象DAO 是一种设计模式它用于抽象和封装对数据库的访问。通过 DAO你可以定义一组方法来访问数据库而不需要在代码中直接写 SQL 语句。这样可以使代码更加整洁也更容易进行单元测试。ActiveRecordActiveRecord 是一种 ORM对象关系映射模式它允许你把数据库表映射为一个 PHP 对象。这样你就可以像操作 PHP 对象一样来操作数据库表了。每个表对应一个 PHP 类类的一个实例就代表表中的一行记录。底层原理DAO在底层DAO 会使用 PDOPHP 数据对象或者其它数据库抽象层来执行 SQL 语句。当你调用 DAO 的方法时它会生成相应的 SQL 语句并通过 PDO 发送到数据库服务器执行。ActiveRecord在底层ActiveRecord 会根据你的 PHP 类和数据库表之间的映射关系自动生成 SQL 语句来执行增删改查操作。例如当你调用一个 ActiveRecord 对象的save()方法时它会生成一个 INSERT 或 UPDATE 语句来把对象的状态保存到数据库中。通俗解释想象你有一个存储玩具信息的数据库表。使用 DAO你可以定义一个方法来获取所有的玩具信息而不需要直接写 SQL 语句。而使用 ActiveRecord你可以定义一个玩具类然后创建这个类的对象来表示数据库表中的每一行玩具记录。你可以直接操作这个对象来修改玩具的信息然后保存到数据库中。PHP 实例代码假设我们有一个users表包含id,name, 和email字段。使用 ActiveRecordnamespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { public static function tableName() { return users; // 对应数据库中的表名 } } // 使用示例 $user new User(); $user-name John Doe; $user-email johnexample.com; $user-save(); // 将新用户保存到数据库使用 DAO在 Yii2 中DAO 通常通过 Yii::$app-db 来访问这是一个已经配置好的数据库连接实例。use Yii; // 使用示例 $query Yii::$app-db-createCommand(INSERT INTO users (name, email) VALUES (:name, :email)) -bindParam(:name, $name) -bindParam(:email, $email) -execute();在这个 DAO 示例中我们直接使用 SQL 语句来插入新用户并通过bindParam方法绑定参数以防止 SQL 注入攻击。最后execute()方法执行 SQL 语句。注意在实际应用中为了安全性和便捷性通常会更多地使用 ActiveRecord 而不是直接写 SQL 语句。不过在某些复杂查询或性能关键的场景中可能会需要直接使用 DAO 和原生 SQL。