数码资讯
Yii学习总结的数据访问对象(DAO)
Yii提供了强大的数据库编程的支持。Yii数据访问对象(DAO)是建立在PHP数据对象(PDO)延伸,使不同的数据库管理系统(DBMS)是在一个统一的接口访问。应用开发Yii的刀可以很容易地切换到不同的数据库管理系统,而不需要修改数据访问代码。 数据访问对象(DAO)提供了一个通用的API,用于对存
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
Yii提供了强大的数据库编程的支持。Yii数据访问对象(DAO)是建立在PHP数据对象(PDO)延伸,使不同的数据库管理系统(DBMS)是在一个统一的接口访问。应用开发Yii的刀可以很容易地切换到不同的数据库管理系统,而不需要修改数据访问代码。
数据访问对象(DAO)提供了一个通用的API,用于对存储在不同数据库管理系统(DBMS)中的数据进行访问。因此,当将底层DBMS更改为另一个DBMS时,不需要修改使用DAO访问数据的代码。
一道是基于PHP数据对象(PDO)建造的。它是一个扩展,提供了统一的许多流行的数据库管理系统,数据访问,包括MySQL,PostgreSQL,等等。因此,使用Yii DAO,PDO扩展和具体的PDO数据库驱动程序,如pdo_mysql,必须安装。
一道主要包含以下四类:
cdbconnection:代表一个数据库连接。
CDbCommand:代表一个SQL语句,通过数据库执行。
CDbDataReader:是一个流,向前移动,从行集的查询结果。
cdbtransaction:代表一个数据库事务。
接下来,我们介绍了在不同情况下的一道中的应用。
1。建立数据库连接
创建数据库连接,创建一个cdbconnection实例和激活它。到数据库的连接需要一个数据源名称(DSN)指定的连接信息,用户名和密码也可能被使用。与数据库的连接过程中出现错误时(例如,错误的DSN或无效的用户名 /密码),将抛出一个异常。
复制代码代码如下所示:
连接=新cdbconnection(美元美元美元美元的DSN,用户名,密码);
连接。您可以尝试使用…捕获捕获可能抛出的异常。
$连接>活动=真;
......
连接>活动= false;关闭连接
该DSN格式取决于PDO的数据库驱动的应用。一般来说,DSN包含PDO驱动程序的名称,紧跟冒号,并保持与特定驱动程序的连接语法。更多的信息可以从PDO文档获得。以下是常见的DSN格式。
复制代码代码如下所示:
SQLite:SQLite: / / / DBFile路径
MySQL:MySQL:主机= localhost;北京库
PostgreSQL:PGSQL:主机= localhost;端口= 5432;北京库
SQL服务器:MSSQL:主机= localhost;北京库
Oracle OCI:北京: / / /库本地:1521
因为cdbconnection继承capplicationcomponent,我们也可以使用它作为一个应用程序的组成部分。为此,配置数据库(或其他名字)在应用程序配置应用程序组件如下:
复制代码代码如下所示:
(阵列
......
组件=数组(
......
db=数组(
类= > 'cdbconnection,
'ConnectionString' = > 'mysql:主机为localhost;北京库,
用户名= > 'root,
密码= > 'password,
emulateprepare= >真的,由一些MySQL安装 / /需要
),
),
)
然后,我们可以通过一连接access数据库::APP()-> db.it已自动激活,除非我们特别配置cdbconnection::自动连接是错误的。这样,这个单一的数据库连接可以共享代码中的许多地方。
2。执行SQL语句
在建立了数据库连接、SQL语句可以使用cdbcommand执行。你可以通过使用指定的SQL语句作为参数来调用cdbconnection创建一个cdbcommand实例::createCommand()。
复制代码代码如下所示:
连接= Yii应用::美元(->分贝); / /如果你已经建立了一个分贝链接
如果没有,您可能需要显式地建立连接:
连接=新/ cdbconnection美元(美元美元美元的DSN,用户名,密码);
$命令=连接-> createcommand美元($ SQL);
如果需要,SQL语句可以按照以下方式进行修改:
/ / $命令->文本= $ NewSQL;
SQL语句是在通过以下两种方式执行cdbcommand:
执行():执行一个非查询(非查询)SQL语句,如插入、更新和删除。如果成功,它返回受此执行影响的行数。
查询():执行SQL语句返回的行数的数据,如选择。如果成功,它返回一个cdbdatareader实例,通过数据的结果排可以走过。为了简单起见,(一)也实施了一系列queryxxx()方法返回结果的直接查询。
如果在执行SQL语句时发生错误,则会引发异常。
复制代码代码如下所示:
美元美元->执行命令行数=(SQL); / /不执行查询
($美元DataReader =命令>查询); / /执行一个SQL查询
($行=美元命令-> queryall); / /所有行的查询并返回结果
($行=美元命令-> queryrow); / /查询并返回结果的第一行
($美元列=命令> querycolumn); / /查询并返回结果的第一栏
(美元价值= $命令-> queryscalar); / /查询并返回第一行第一列的
三.获取查询结果
在cdbcommand::查询()产生一个cdbdatareader实例,你可以通过重复cdbdatareader得到结果中的行数::读()。你也可以使用cdbdatareader线在PHP的foreach语言结构检索数据。
复制代码代码如下所示:
美元美元的DataReader =命令>查询();
(读取)重复调用,直到返回false。
而((($行= $ DataReader ->阅读())!= false){…}
使用foreach /导线在每一行的数据
foreach($ DataReader达行){…}
将要提取到数组中的所有行
行=美元美元DataReader ->所有();
注:不同的查询(),所有的queryxxx()方法返回的数据直接。例如,queryrow()返回表示查询结果的第一行数组。
4。使用事务
当一个应用程序执行多个查询,每个查询需要读/写信息到数据库,它是确保数据库不留几个查询只执行一些其他的查询非常重要。交易,在一cdbtransaction实例表示,可能在以下情况下开始:
创业。
一个接一个地执行查询。对数据库的任何更新对外部世界都是不可见的。
提交事务。如果事务成功,则更新可见。
如果其中一个查询失败,整个事务将回滚。
上述工作流可以通过以下代码实现:
复制代码代码如下所示:
美元交易= $连接->开始();
尝试
{
连接-> createcommand美元(约合SQL1)->执行();
连接-> createcommand美元(约合SQL2)->执行();
SQL执行…其他。
$事务>提交();
}
catch(异常E)如果查询失败,则引发异常。
{
$事务>回滚();
}
5。结合参数
为了避免SQL注入攻击和提高SQL语句重复执行的效率,你可以准备(准备)包含可选参数占位符的SQL语句,这些占位符将被实际参数时,参数绑定。
参数占位符可以命名(一个独特的标签表示)或没有(一个问号表示)。Call CDbCommand::::bindparam()或cdbcommand bindValue()与实际参数替换这些占位符。这些参数不需要引用名言:底层的数据库驱动程序会为你做这个参数绑定必须在SQL语句执行完成。
复制代码代码如下所示:
带有两个占位符用户名和电子邮件的SQL
为SQL =插入tbl_user(用户名、电子邮件)值(:用户名、电子邮件);
$命令=连接-> createcommand美元($ SQL);
使用实际用户名替换占位符:
$命令-> bindparam(:用户名
用实际的电子邮件替换占位符:
$命令-> bindparam(:电子邮件
$命令>执行();
将新的参数设置为另一行
$命令-> bindparam(:用户名
$命令-> bindparam(:电子邮件
$命令>执行();
方法bindparam()和bindValue()非常相似,唯一的区别是,前者使用PHP变量绑定参数,后者使用价值。在存储大数据块参数,前者应首先使用性能的考虑。
有关绑定参数的更多信息,请参阅相关PHP文档。
6。绑定列
当您获得查询结果时,还可以使用PHP变量来绑定列。每次查询结果中有一行时,都会自动填充最新的值。
复制代码代码如下所示:
为SQL =选择用户名,从tbl_user 电子邮件;
DataReader连接->美元=美元createcommand($ SQL)->查询();
使用第一列(用户名)的用户名绑定
DataReader -> bindcolumn美元(1美元的用户名);
第二个电子邮件绑定变量(email)的使用
DataReader -> bindcolumn美元(2美元的电子邮件);
而($ DataReader ->阅读()!= false)
{
用户名和电子邮件中包含的用户名和电子邮件
}
7。使用表前缀
从版本1.1.0,Yii提供使用表前缀支持集成。表前缀是一个字符串,在数据库中当前连接的数据表的名称添加。通常用于共享服务器环境中,多个应用程序可以共享同一数据库,使用不同的表前缀区分对方。例如,一个应用程序可以使用tbl_作为表前缀和另一个可以使用yii_。
使用表前缀,配置cdbconnection::的tableprefix属性所需的表前缀。然后,在SQL语句中,{ {是} }用于表示名称的表,在表名是表名没有前缀。例如,如果数据库包含一个表称为tbl_user,和tbl_为表前缀,我们可以执行用户查询相关用下面的代码。
复制代码代码如下所示:
为SQL = 'select * { { } }的用户;
为用户连接-> createcommand美元($ SQL)-> queryall();
数据访问对象(DAO)提供了一个通用的API,用于对存储在不同数据库管理系统(DBMS)中的数据进行访问。因此,当将底层DBMS更改为另一个DBMS时,不需要修改使用DAO访问数据的代码。
一道是基于PHP数据对象(PDO)建造的。它是一个扩展,提供了统一的许多流行的数据库管理系统,数据访问,包括MySQL,PostgreSQL,等等。因此,使用Yii DAO,PDO扩展和具体的PDO数据库驱动程序,如pdo_mysql,必须安装。
一道主要包含以下四类:
cdbconnection:代表一个数据库连接。
CDbCommand:代表一个SQL语句,通过数据库执行。
CDbDataReader:是一个流,向前移动,从行集的查询结果。
cdbtransaction:代表一个数据库事务。
接下来,我们介绍了在不同情况下的一道中的应用。
1。建立数据库连接
创建数据库连接,创建一个cdbconnection实例和激活它。到数据库的连接需要一个数据源名称(DSN)指定的连接信息,用户名和密码也可能被使用。与数据库的连接过程中出现错误时(例如,错误的DSN或无效的用户名 /密码),将抛出一个异常。
复制代码代码如下所示:
连接=新cdbconnection(美元美元美元美元的DSN,用户名,密码);
连接。您可以尝试使用…捕获捕获可能抛出的异常。
$连接>活动=真;
......
连接>活动= false;关闭连接
该DSN格式取决于PDO的数据库驱动的应用。一般来说,DSN包含PDO驱动程序的名称,紧跟冒号,并保持与特定驱动程序的连接语法。更多的信息可以从PDO文档获得。以下是常见的DSN格式。
复制代码代码如下所示:
SQLite:SQLite: / / / DBFile路径
MySQL:MySQL:主机= localhost;北京库
PostgreSQL:PGSQL:主机= localhost;端口= 5432;北京库
SQL服务器:MSSQL:主机= localhost;北京库
Oracle OCI:北京: / / /库本地:1521
因为cdbconnection继承capplicationcomponent,我们也可以使用它作为一个应用程序的组成部分。为此,配置数据库(或其他名字)在应用程序配置应用程序组件如下:
复制代码代码如下所示:
(阵列
......
组件=数组(
......
db=数组(
类= > 'cdbconnection,
'ConnectionString' = > 'mysql:主机为localhost;北京库,
用户名= > 'root,
密码= > 'password,
emulateprepare= >真的,由一些MySQL安装 / /需要
),
),
)
然后,我们可以通过一连接access数据库::APP()-> db.it已自动激活,除非我们特别配置cdbconnection::自动连接是错误的。这样,这个单一的数据库连接可以共享代码中的许多地方。
2。执行SQL语句
在建立了数据库连接、SQL语句可以使用cdbcommand执行。你可以通过使用指定的SQL语句作为参数来调用cdbconnection创建一个cdbcommand实例::createCommand()。
复制代码代码如下所示:
连接= Yii应用::美元(->分贝); / /如果你已经建立了一个分贝链接
如果没有,您可能需要显式地建立连接:
连接=新/ cdbconnection美元(美元美元美元的DSN,用户名,密码);
$命令=连接-> createcommand美元($ SQL);
如果需要,SQL语句可以按照以下方式进行修改:
/ / $命令->文本= $ NewSQL;
SQL语句是在通过以下两种方式执行cdbcommand:
执行():执行一个非查询(非查询)SQL语句,如插入、更新和删除。如果成功,它返回受此执行影响的行数。
查询():执行SQL语句返回的行数的数据,如选择。如果成功,它返回一个cdbdatareader实例,通过数据的结果排可以走过。为了简单起见,(一)也实施了一系列queryxxx()方法返回结果的直接查询。
如果在执行SQL语句时发生错误,则会引发异常。
复制代码代码如下所示:
美元美元->执行命令行数=(SQL); / /不执行查询
($美元DataReader =命令>查询); / /执行一个SQL查询
($行=美元命令-> queryall); / /所有行的查询并返回结果
($行=美元命令-> queryrow); / /查询并返回结果的第一行
($美元列=命令> querycolumn); / /查询并返回结果的第一栏
(美元价值= $命令-> queryscalar); / /查询并返回第一行第一列的
三.获取查询结果
在cdbcommand::查询()产生一个cdbdatareader实例,你可以通过重复cdbdatareader得到结果中的行数::读()。你也可以使用cdbdatareader线在PHP的foreach语言结构检索数据。
复制代码代码如下所示:
美元美元的DataReader =命令>查询();
(读取)重复调用,直到返回false。
而((($行= $ DataReader ->阅读())!= false){…}
使用foreach /导线在每一行的数据
foreach($ DataReader达行){…}
将要提取到数组中的所有行
行=美元美元DataReader ->所有();
注:不同的查询(),所有的queryxxx()方法返回的数据直接。例如,queryrow()返回表示查询结果的第一行数组。
4。使用事务
当一个应用程序执行多个查询,每个查询需要读/写信息到数据库,它是确保数据库不留几个查询只执行一些其他的查询非常重要。交易,在一cdbtransaction实例表示,可能在以下情况下开始:
创业。
一个接一个地执行查询。对数据库的任何更新对外部世界都是不可见的。
提交事务。如果事务成功,则更新可见。
如果其中一个查询失败,整个事务将回滚。
上述工作流可以通过以下代码实现:
复制代码代码如下所示:
美元交易= $连接->开始();
尝试
{
连接-> createcommand美元(约合SQL1)->执行();
连接-> createcommand美元(约合SQL2)->执行();
SQL执行…其他。
$事务>提交();
}
catch(异常E)如果查询失败,则引发异常。
{
$事务>回滚();
}
5。结合参数
为了避免SQL注入攻击和提高SQL语句重复执行的效率,你可以准备(准备)包含可选参数占位符的SQL语句,这些占位符将被实际参数时,参数绑定。
参数占位符可以命名(一个独特的标签表示)或没有(一个问号表示)。Call CDbCommand::::bindparam()或cdbcommand bindValue()与实际参数替换这些占位符。这些参数不需要引用名言:底层的数据库驱动程序会为你做这个参数绑定必须在SQL语句执行完成。
复制代码代码如下所示:
带有两个占位符用户名和电子邮件的SQL
为SQL =插入tbl_user(用户名、电子邮件)值(:用户名、电子邮件);
$命令=连接-> createcommand美元($ SQL);
使用实际用户名替换占位符:
$命令-> bindparam(:用户名
用实际的电子邮件替换占位符:
$命令-> bindparam(:电子邮件
$命令>执行();
将新的参数设置为另一行
$命令-> bindparam(:用户名
$命令-> bindparam(:电子邮件
$命令>执行();
方法bindparam()和bindValue()非常相似,唯一的区别是,前者使用PHP变量绑定参数,后者使用价值。在存储大数据块参数,前者应首先使用性能的考虑。
有关绑定参数的更多信息,请参阅相关PHP文档。
6。绑定列
当您获得查询结果时,还可以使用PHP变量来绑定列。每次查询结果中有一行时,都会自动填充最新的值。
复制代码代码如下所示:
为SQL =选择用户名,从tbl_user 电子邮件;
DataReader连接->美元=美元createcommand($ SQL)->查询();
使用第一列(用户名)的用户名绑定
DataReader -> bindcolumn美元(1美元的用户名);
第二个电子邮件绑定变量(email)的使用
DataReader -> bindcolumn美元(2美元的电子邮件);
而($ DataReader ->阅读()!= false)
{
用户名和电子邮件中包含的用户名和电子邮件
}
7。使用表前缀
从版本1.1.0,Yii提供使用表前缀支持集成。表前缀是一个字符串,在数据库中当前连接的数据表的名称添加。通常用于共享服务器环境中,多个应用程序可以共享同一数据库,使用不同的表前缀区分对方。例如,一个应用程序可以使用tbl_作为表前缀和另一个可以使用yii_。
使用表前缀,配置cdbconnection::的tableprefix属性所需的表前缀。然后,在SQL语句中,{ {是} }用于表示名称的表,在表名是表名没有前缀。例如,如果数据库包含一个表称为tbl_user,和tbl_为表前缀,我们可以执行用户查询相关用下面的代码。
复制代码代码如下所示:
为SQL = 'select * { { } }的用户;
为用户连接-> createcommand美元($ SQL)-> queryall();
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。