CDbConnection
包 | system.db |
---|---|
继承 | class CDbConnection » CApplicationComponent » CComponent |
实现 | IApplicationComponent |
源自 | 1.0 |
版本 | $Id: CDbConnection.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/CDbConnection.php |
CDbConnection与CDbCommand, CDbDataReader 和 CDbTransaction一起提供了根据 DBMS 通用 API 来访问数据功能。 它们是PDO PHP 扩展的简化。
要建立一个连接,在指定connectionString, username 和 password之后, 设置active为true,。
下面的例子显示了怎样创建一个CDbConnection实例和建立实际的连接: :
$connection=new CDbConnection($dsn,$username,$password); $connection->active=true;
在DB连接建立之后,可以执行一个像下面这样的 SQL 语句:
$command=$connection->createCommand($sqlStatement); $command->execute(); // a non-query SQL statement execution // or execute an SQL query and fetch the result set $reader=$command->query(); // each $row is an array representing a row of data foreach($reader as $row) ...
也能执行一个准备好的 SQL 语句,并绑定参数到准备好的 SQL:
$command=$connection->createCommand($sqlStatement); $command->bindParam($name1,$value1); $command->bindParam($name2,$value2); $command->execute();
要使用事务,像下面这样做:
$transaction=$connection->beginTransaction(); try { $connection->createCommand($sql1)->execute(); $connection->createCommand($sql2)->execute(); //.... other SQL executions $transaction->commit(); } catch(Exception $e) { $transaction->rollBack(); }
CDbConnection也提供一套方法来支持设置和查询特定的DBMS属性, 例如 nullConversion。
因为CDbConnection实现了IApplicationComponent接口,它能被用作一个应用程序组件, 并在应用程序中进行配置。 如下:
array( 'components'=>array( 'db'=>array( 'class'=>'CDbConnection', 'connectionString'=>'sqlite:path/to/dbfile', ), ), )
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
active | boolean | 返回DB连接是否已经建立。 | CDbConnection |
attributes | array | 返回先前为数据库连接显式设置的属性。 | CDbConnection |
autoCommit | boolean | 返回是否创建或更新数据库记录将自动提交。 | CDbConnection |
autoConnect | boolean | 数据库是否应自动建立连接 此组件将被初始化。默认为true。注意,这个属性仅仅有效果当 CDbConnection对象被用作一个应用程序组件。 | CDbConnection |
behaviors | array | 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 | CApplicationComponent |
charset | string | 用于数据库连接charset字符串。这个属性仅仅用于 MySQL 和 PostgreSQL 数据库。默认为 null, 意味着使用此数据库指定的默认的charset。 注意如果你使用 GBK 或 BIG5 ,那么推荐更新到 PHP 5. | CDbConnection |
clientVersion | string | 返回数据库驱动程序的版本信息。 | CDbConnection |
columnCase | mixed | 返回列名称的大小写情况 | CDbConnection |
commandBuilder | CDbCommandBuilder | 返回为当前DB连接的SQL命令生成器。 | CDbConnection |
connectionStatus | string | 返回连接的状态。 | CDbConnection |
connectionString | string | 数据源名称或 DSN,包含连接到数据库所需的信息。 | CDbConnection |
currentTransaction | CDbTransaction | 返回当前活动的事务。 | CDbConnection |
driverMap | array | PDO驱动程序和schema类名之间的映射。 使用路径别名指定一个 schema 类。 | CDbConnection |
driverName | string | 返回的数据库驱动程序的名称。 | CDbConnection |
emulatePrepare | boolean | 是否打开准备模拟。默认为 false, 意味着PDO将准备使用本地预备支持,如果可用。对于某些数据库 (如 MySQL), 这将需要设置为true 以至于 PDO 能模拟该预备支持 绕过buggy本地预备支持。注意,这个属性仅仅在PHP 5. | CDbConnection |
enableParamLogging | boolean | 是否记录的值绑定到一个准备的SQL语句。 默认为 false。在开发阶段,你应该考虑设置这个属性为true 以至于参数值能被绑定到SQL语句以记录用于高度目的。 你应该知道记录参数值代价是高昂的, 将很大程度影响你的应用程序的性能。 | CDbConnection |
enableProfiling | boolean | 正在执行的SQL语句是否启用分析。 默认为 false。这个主要 启用它主要用于开发阶段找出SQL执行的瓶颈。 | CDbConnection |
initSQLs | array | DB连接建立后执行的SQL语句列表。 | CDbConnection |
isInitialized | boolean | 检查应用组件是否已经初始化。 | CApplicationComponent |
lastInsertID | string | 返回最后一个插入的行的ID或序列值。 | CDbConnection |
nullConversion | mixed | 返回null与empty字符串如何转化的情况。 | CDbConnection |
password | string | 建立数据连接的密码。默认为空字符串。 | CDbConnection |
pdoClass | string | 自定义PDO封装类。 | CDbConnection |
pdoInstance | PDO | 返回PDO实例。 | CDbConnection |
persistent | boolean | 返回数据库连接是否持久的。 | CDbConnection |
prefetch | boolean | 返回数据库连接是否可执行数据预获取。 | CDbConnection |
queryCacheID | string | 缓存应用程序组件的ID,用于查询缓存。 默认为'cache',它指的是主缓存应用程序组件。 设置这个属性为false,如果你想禁用查询缓存。 | CDbConnection |
queryCachingCount | integer | 下次将被缓存的SQL语句的数目。 如果它是 0,即使查询缓存被启用,查询也不会被缓存。 注意每次执行一条SQL语句之后 (是否在DB服务器上执行或从查询缓存中获取), 这个属性将被减少1至0。 | CDbConnection |
queryCachingDependency | CCacheDependency | 当查询结果保存到缓存时,使用的依赖。 | CDbConnection |
queryCachingDuration | integer | 查询结果被保留在缓存中有效的秒数。 使用0或负数值指示不缓存查询结果 (默认 behavior). | CDbConnection |
schema | CDbSchema | 返回当前连接的数据库结构 | CDbConnection |
schemaCacheID | string | 缓存应用程序组件的ID,用于缓存表的元数据。 默认为'cache' 它指的是主缓存应用程序组件。 如果要禁用缓存表的元数据,此属性设置为false。 | CDbConnection |
schemaCachingDuration | integer | 数据表中元数据在缓存中保存的秒钟数。 使用0或负值指示不缓存schema。 如果大于0和正数,cache被启用,表的元数据将被缓存。 | CDbConnection |
schemaCachingExclude | array | 元数据不被缓存的列的列表。默认为空字符串。 | CDbConnection |
serverInfo | string | 返回DBMS服务器的信息。 | CDbConnection |
serverVersion | string | 返回DBMS服务器的版本信息。 | CDbConnection |
stats | array | 返回SQL执行的统计结果。 | CDbConnection |
tablePrefix | string | 表名称的默认前缀。默认为 null,意味着没有表前缀。 通过设置这个属性,任何标记像 '{{tableName}}' 在 CDbCommand::text 将 'prefixTableName'替换, 这里 'prefix' 指的是这个属性值。 | CDbConnection |
timeout | integer | 返回连接的超时设置。 | CDbConnection |
username | string | 建立数据连接的用户名。默认为空字符串。 | CDbConnection |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | 构造函数。 | CDbConnection |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__sleep() | 序列化时关闭连接。 | CDbConnection |
__unset() | 设置一个组件的属性为null。 | CComponent |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
beginTransaction() | 启动事务。 | CDbConnection |
cache() | 设置关于查询缓存的参数。 | CDbConnection |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
createCommand() | 创建用于执行的命令。 | CDbConnection |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaluateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getActive() | 返回DB连接是否已经建立。 | CDbConnection |
getAttribute() | 获取指定的数据库连接属性信息。 | CDbConnection |
getAttributes() | 返回先前为数据库连接显式设置的属性。 | CDbConnection |
getAutoCommit() | 返回是否创建或更新数据库记录将自动提交。 | CDbConnection |
getAvailableDrivers() | 返回一个可用的PDO驱动程序的列表。 | CDbConnection |
getClientVersion() | 返回数据库驱动程序的版本信息。 | CDbConnection |
getColumnCase() | 返回列名称的大小写情况 | CDbConnection |
getCommandBuilder() | 返回为当前DB连接的SQL命令生成器。 | CDbConnection |
getConnectionStatus() | 返回连接的状态。 | CDbConnection |
getCurrentTransaction() | 返回当前活动的事务。 | CDbConnection |
getDriverName() | 返回的数据库驱动程序的名称。 | CDbConnection |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getIsInitialized() | 检查应用组件是否已经初始化。 | CApplicationComponent |
getLastInsertID() | 返回最后一个插入的行的ID或序列值。 | CDbConnection |
getNullConversion() | 返回null与empty字符串如何转化的情况。 | CDbConnection |
getPdoInstance() | 返回PDO实例。 | CDbConnection |
getPdoType() | 指定的PHP数据类型决定PDO数据类型。 | CDbConnection |
getPersistent() | 返回数据库连接是否持久的。 | CDbConnection |
getPrefetch() | 返回数据库连接是否可执行数据预获取。 | CDbConnection |
getSchema() | 返回当前连接的数据库结构 | CDbConnection |
getServerInfo() | 返回DBMS服务器的信息。 | CDbConnection |
getServerVersion() | 返回DBMS服务器的版本信息。 | CDbConnection |
getStats() | 返回SQL执行的统计结果。 | CDbConnection |
getTimeout() | 返回连接的超时设置。 | CDbConnection |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
init() | 初始化组件。 | CDbConnection |
quoteColumnName() | 在一个查询中引用一个列名称。 | CDbConnection |
quoteTableName() | 在一个查询中引用的表名。 | CDbConnection |
quoteValue() | 在一个查询中引用一个字符串值。 | CDbConnection |
raiseEvent() | 发起一个事件。 | CComponent |
setActive() | 打开或关闭DB连接。 | CDbConnection |
setAttribute() | 设置数据库连接上的一个属性。 | CDbConnection |
setAttributes() | 设置一套数据库连接的属性。 | CDbConnection |
setAutoCommit() | 设置是否创建或更新数据库记录将自动提交。 | CDbConnection |
setColumnCase() | 设置列名称的大小写。 | CDbConnection |
setNullConversion() | 设置null和empty 字符串如何转换。 | CDbConnection |
setPersistent() | 设置此连接是否是持久连接。 | CDbConnection |
受保护方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
close() | 关闭当前连接的数据库连接。 | CDbConnection |
createPdoInstance() | 创建一个 PDO 实例。 | CDbConnection |
initConnection() | 初始化开放数据库连接。 | CDbConnection |
open() | 打开数据库连接,如果它当前没有打开 | CDbConnection |
属性详细
active 属性 public boolean getActive()public void setActive(boolean $value)
返回DB连接是否已经建立。
attributes 属性 (可用自 v1.1.7) public array getAttributes()public void setAttributes(array $values)
返回先前为数据库连接显式设置的属性。
参见
- setAttributes
public void setAutoCommit(boolean $value)
返回是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
autoConnect 属性 public boolean $autoConnect;数据库是否应自动建立连接 此组件将被初始化。默认为true。注意,这个属性仅仅有效果当 CDbConnection对象被用作一个应用程序组件。
charset 属性 public string $charset;用于数据库连接charset字符串。这个属性仅仅用于 MySQL 和 PostgreSQL 数据库。默认为 null, 意味着使用此数据库指定的默认的charset。
注意如果你使用 GBK 或 BIG5 ,那么推荐更新到 PHP 5.3.6+和通过DSN指定 charset 像下面这样 'mysql:dbname=mydatabase;host=127.0.0.1;charset=GBK;'。
返回数据库驱动程序的版本信息。
columnCase 属性 public mixed getColumnCase()public void setColumnCase(mixed $value)
返回列名称的大小写情况
参见
- http://www.php.net/manual/en/pdo.setattribute.php
返回为当前DB连接的SQL命令生成器。
connectionStatus 属性 只读 public string getConnectionStatus()返回连接的状态。 一些 DBMS (如 sqlite) 可能不支持这个特征。
connectionString 属性 public string $connectionString;数据源名称或 DSN,包含连接到数据库所需的信息。
参见
- 注意,如果你使用的是 GBK 或 BIG5 ,推荐你更新到PHP 5.3.6+ , 并指定通过DSN指定charset像下面这样: ‘mysql:dbname=mydatabase;host=127.0.0.1;charset=GBK;’。
返回当前活动的事务。
driverMap 属性 (可用自 v1.1.6) public array $driverMap;PDO驱动程序和schema类名之间的映射。 使用路径别名指定一个 schema 类。
driverName 属性 只读 public string getDriverName()返回的数据库驱动程序的名称。
emulatePrepare 属性 public boolean $emulatePrepare;是否打开准备模拟。默认为 false, 意味着PDO将准备使用本地预备支持,如果可用。对于某些数据库 (如 MySQL), 这将需要设置为true 以至于 PDO 能模拟该预备支持 绕过buggy本地预备支持。注意,这个属性仅仅在PHP 5.1.3及以上有效。 默认值为 null,这将不改变PDO的 ATTR_EMULATE_PREPARES 值。
enableParamLogging 属性 public boolean $enableParamLogging;是否记录的值绑定到一个准备的SQL语句。 默认为 false。在开发阶段,你应该考虑设置这个属性为true 以至于参数值能被绑定到SQL语句以记录用于高度目的。 你应该知道记录参数值代价是高昂的, 将很大程度影响你的应用程序的性能。
enableProfiling 属性 public boolean $enableProfiling;正在执行的SQL语句是否启用分析。 默认为 false。这个主要 启用它主要用于开发阶段找出SQL执行的瓶颈。
initSQLs 属性 (可用自 v1.1.1) public array $initSQLs;DB连接建立后执行的SQL语句列表。
lastInsertID 属性 只读 public string getLastInsertID(string $sequenceName='')返回最后一个插入的行的ID或序列值。
参见
- http://www.php.net/manual/en/function.PDO-lastInsertId.php
public void setNullConversion(mixed $value)
返回null与empty字符串如何转化的情况。
参见
- http://www.php.net/manual/en/pdo.setattribute.php
建立数据连接的密码。默认为空字符串。
pdoClass 属性 (可用自 v1.1.8) public string $pdoClass;自定义PDO封装类。
pdoInstance 属性 只读 public PDO getPdoInstance()返回PDO实例。
persistent 属性 public boolean getPersistent()public void setPersistent(boolean $value)
返回数据库连接是否持久的。 某些 DBMS (如 sqlite) 可能不支持这个特征。
prefetch 属性 只读 public boolean getPrefetch()返回数据库连接是否可执行数据预获取。
queryCacheID 属性 (可用自 v1.1.7) public string $queryCacheID;缓存应用程序组件的ID,用于查询缓存。 默认为'cache',它指的是主缓存应用程序组件。 设置这个属性为false,如果你想禁用查询缓存。
queryCachingCount 属性 (可用自 v1.1.7) public integer $queryCachingCount;下次将被缓存的SQL语句的数目。 如果它是 0,即使查询缓存被启用,查询也不会被缓存。 注意每次执行一条SQL语句之后 (是否在DB服务器上执行或从查询缓存中获取), 这个属性将被减少1至0。
queryCachingDependency 属性 (可用自 v1.1.7) public CCacheDependency $queryCachingDependency;当查询结果保存到缓存时,使用的依赖。
参见
- queryCachingDuration
查询结果被保留在缓存中有效的秒数。 使用0或负数值指示不缓存查询结果 (默认 behavior).
为了启用查询缓存,这个属性必须被设置为正数。 并且 queryCacheID 必须指向一个有效的缓存组件 ID。
该方法cache() 提供一种方便的方法设置此属性 和 queryCachingDependency。
参见
- cache
- queryCachingDependency
- queryCacheID
返回当前连接的数据库结构
schemaCacheID 属性 public string $schemaCacheID;缓存应用程序组件的ID,用于缓存表的元数据。 默认为'cache' 它指的是主缓存应用程序组件。 如果要禁用缓存表的元数据,此属性设置为false。
schemaCachingDuration 属性 public integer $schemaCachingDuration;数据表中元数据在缓存中保存的秒钟数。 使用0或负值指示不缓存schema。 如果大于0和正数,cache被启用,表的元数据将被缓存。
参见
- schemaCachingExclude
元数据不被缓存的列的列表。默认为空字符串。
参见
- schemaCachingDuration
返回DBMS服务器的信息。
serverVersion 属性 只读 public string getServerVersion()返回DBMS服务器的版本信息。
stats 属性 只读 public array getStats()返回SQL执行的统计结果。 返回的结果包含执行SQL语句的数目和 所花费的总时间。 为了使用此方法,enableProfiling必须设置为 true。
tablePrefix 属性 (可用自 v1.1.0) public string $tablePrefix;表名称的默认前缀。默认为 null,意味着没有表前缀。 通过设置这个属性,任何标记像 '{{tableName}}' 在 CDbCommand::text 将 'prefixTableName'替换, 这里 'prefix' 指的是这个属性值。
timeout 属性 只读 public integer getTimeout()返回连接的超时设置。
username 属性 public string $username;建立数据连接的用户名。默认为空字符串。
方法详细
__construct() 方法public void __construct(string $dsn='', string $username='', string $password='') | ||
$dsn | string | 数据源名称,或 DSN,包含连接到数据库所需的信息。 |
$username | string | DSN 字符串的用户名。 |
$password | string | DSN 字符串的密码。 |
publicfunction__construct($dsn='',$username='',$password='')
{
$this->connectionString=$dsn;
$this->username=$username;
$this->password=$password;
}
构造函数。 注意,当连接实例创建的时候,并不会连接数据库。 设置 active 属性为true, 来建立此连接。
参见
- http://www.php.net/manual/en/function.PDO-construct.php
public array __sleep() | ||
{return} | array |
publicfunction__sleep()
{
$this->close();
returnarray_keys(get_object_vars($this));
}
序列化时关闭连接。
beginTransaction() 方法public CDbTransaction beginTransaction() | ||
{return} | CDbTransaction | 返回事务启动 |
publicfunctionbeginTransaction()
{
Yii::trace('Startingtransaction','system.db.CDbConnection');
$this->setActive(true);
$this->_pdo->beginTransaction();
return$this->_transaction=newCDbTransaction($this);
}
启动事务。
cache() 方法 (可用自 v1.1.7)public CDbConnection cache(integer $duration, CCacheDependency $dependency=NULL, integer $queryCount=1) | ||
$duration | integer | 查询结果保持在缓存中有效的秒数。 如果它是0,缓存将被禁用。 |
$dependency | CCacheDependency | 当查询结果保存到缓存时,使用的依赖。 |
$queryCount | integer | 在调用此方法后,需要缓存的SQL查询的数目。 默认为 1,意味着下一条SQL查询将被缓存。 |
{return} | CDbConnection | 返回连接实例本身。 |
publicfunctioncache($duration,$dependency=null,$queryCount=1)
{
$this->queryCachingDuration=$duration;
$this->queryCachingDependency=$dependency;
$this->queryCachingCount=$queryCount;
return$this;
}
设置关于查询缓存的参数。 此方法可用于启用或禁用查询缓存。 通过设置$duration参数为0,查询缓存将被禁用。 要不然, 新的SQL语句执行的查询结果将被保存在缓存中, 并且在指定时间段内有效。 如果同样的查询再次执行,结果将直接从缓存中读取, 而不是执行实际的SQL语句。
close() 方法protected void close() |
protectedfunctionclose()
{
Yii::trace('ClosingDBconnection','system.db.CDbConnection');
$this->_pdo=null;
$this->_active=false;
$this->_schema=null;
}
关闭当前连接的数据库连接。 如果连接已经关闭,它不执行任何操作。
createCommand() 方法public CDbCommand createCommand(mixed $query=NULL) | ||
$query | mixed | 要执行的DB查询。这可以是一个字符串,表示一个SQL语句, 或一个数组,它表示SQL语句的不同片段。请参阅 CDbCommand::__construct 有关更多详细信息有关如何将数组作为查询。如果这个参数没有给定, 你必须调用查询生成器的 CDbCommand 方法去建立数据库查询。 |
{return} | CDbCommand | 数据库命令 |
publicfunctioncreateCommand($query=null)
{
$this->setActive(true);
returnnewCDbCommand($this,$query);
}
创建用于执行的命令。
createPdoInstance() 方法protected PDO createPdoInstance() | ||
{return} | PDO | 返回pdo实例 |
protectedfunctioncreatePdoInstance()
{
$pdoClass=$this->pdoClass;
if(($pos=strpos($this->connectionString,':'))!==false)
{
$driver=strtolower(substr($this->connectionString,0,$pos));
if($driver==='mssql'||$driver==='dblib'||$driver==='sqlsrv')
$pdoClass='CMssqlPdoAdapter';
}
returnnew$pdoClass($this->connectionString,$this->username,
$this->password,$this->_attributes);
}
创建一个 PDO 实例。 pdo驱动程序中缺少某些功能时, 我们可以使用一个适配器类,以提供它们。
getActive() 方法public boolean getActive() | ||
{return} | boolean | 返回DB连接是否已经建立 |
publicfunctiongetActive()
{
return$this->_active;
}
返回DB连接是否已经建立。
getAttribute() 方法public mixed getAttribute(integer $name) | ||
$name | integer | 要查询的属性。 |
{return} | mixed | 相应的属性信息 |
publicfunctiongetAttribute($name)
{
$this->setActive(true);
return$this->_pdo->getAttribute($name);
}
获取指定的数据库连接属性信息。
参见
- http://www.php.net/manual/en/function.PDO-getAttribute.php
public array getAttributes() | ||
{return} | array | 返回先前为数据库连接显式设置的属性(name=>value)。 |
publicfunctiongetAttributes()
{
return$this->_attributes;
}
返回先前为数据库连接显式设置的属性。
参见
- setAttributes
public boolean getAutoCommit() | ||
{return} | boolean | 返回是否创建或更新DB记录将自动提交。 |
publicfunctiongetAutoCommit()
{
return$this->getAttribute(PDO::ATTR_AUTOCOMMIT);
}
返回是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
getAvailableDrivers() 方法public static array getAvailableDrivers() | ||
{return} | array | 返回一个可用的PDO驱动程序的列表 |
publicstaticfunctiongetAvailableDrivers()
{
returnPDO::getAvailableDrivers();
}
返回一个可用的PDO驱动程序的列表。
参见
- http://www.php.net/manual/en/function.PDO-getAvailableDrivers.php
public string getClientVersion() | ||
{return} | string | 返回数据库驱动程序的版本信息 |
publicfunctiongetClientVersion()
{
return$this->getAttribute(PDO::ATTR_CLIENT_VERSION);
}
返回数据库驱动程序的版本信息。
getColumnCase() 方法public mixed getColumnCase() | ||
{return} | mixed | 列的大小写情况 |
publicfunctiongetColumnCase()
{
return$this->getAttribute(PDO::ATTR_CASE);
}
返回列名称的大小写情况
参见
- http://www.php.net/manual/en/pdo.setattribute.php
public CDbCommandBuilder getCommandBuilder() | ||
{return} | CDbCommandBuilder | 返回此命令生成器 |
publicfunctiongetCommandBuilder()
{
return$this->getSchema()->getCommandBuilder();
}
返回为当前DB连接的SQL命令生成器。
getConnectionStatus() 方法public string getConnectionStatus() | ||
{return} | string | 返回连接的状态 |
publicfunctiongetConnectionStatus()
{
return$this->getAttribute(PDO::ATTR_CONNECTION_STATUS);
}
返回连接的状态。 一些 DBMS (如 sqlite) 可能不支持这个特征。
getCurrentTransaction() 方法public CDbTransaction getCurrentTransaction() | ||
{return} | CDbTransaction | 返回当前活动的事务。如果没有活动事务返回null。 |
publicfunctiongetCurrentTransaction()
{
if($this->_transaction!==null)
{
if($this->_transaction->getActive())
return$this->_transaction;
}
returnnull;
}
返回当前活动的事务。
getDriverName() 方法public string getDriverName() | ||
{return} | string | 返回的DB驱动程序的名称 |
publicfunctiongetDriverName()
{
if(($pos=strpos($this->connectionString,':'))!==false)
returnstrtolower(substr($this->connectionString,0,$pos));
//return$this->getAttribute(PDO::ATTR_DRIVER_NAME);
}
返回的数据库驱动程序的名称。
getLastInsertID() 方法public string getLastInsertID(string $sequenceName='') | ||
$sequenceName | string | 序列对象的名称 (某些DBMS要求) |
{return} | string | 最后插入的行的 ID,或从序列对象中取回的最后的值。 |
publicfunctiongetLastInsertID($sequenceName='')
{
$this->setActive(true);
return$this->_pdo->lastInsertId($sequenceName);
}
返回最后一个插入的行的ID或序列值。
参见
- http://www.php.net/manual/en/function.PDO-lastInsertId.php
public mixed getNullConversion() | ||
{return} | mixed | 返回值说明null和空字符串是怎样转换的。 |
publicfunctiongetNullConversion()
{
return$this->getAttribute(PDO::ATTR_ORACLE_NULLS);
}
返回null与empty字符串如何转化的情况。
参见
- http://www.php.net/manual/en/pdo.setattribute.php
public PDO getPdoInstance() | ||
{return} | PDO | 返回PDO实例,如果连接还没有建立返回null |
publicfunctiongetPdoInstance()
{
return$this->_pdo;
}
返回PDO实例。
getPdoType() 方法public integer getPdoType(string $type) | ||
$type | string | PHP类型(通过调用gettype()获得)。 |
{return} | integer | 返回相应的PDO类型 |
publicfunctiongetPdoType($type)
{
static$map=array
(
'boolean'=>PDO::PARAM_BOOL,
'integer'=>PDO::PARAM_INT,
'string'=>PDO::PARAM_STR,
'NULL'=>PDO::PARAM_NULL,
);
returnisset($map[$type])?$map[$type]:PDO::PARAM_STR;
}
指定的PHP数据类型决定PDO数据类型。
getPersistent() 方法public boolean getPersistent() | ||
{return} | boolean | 返回连接是否是持久连接 |
publicfunctiongetPersistent()
{
return$this->getAttribute(PDO::ATTR_PERSISTENT);
}
返回数据库连接是否持久的。 某些 DBMS (如 sqlite) 可能不支持这个特征。
getPrefetch() 方法public boolean getPrefetch() | ||
{return} | boolean | 返回是否连接执行数据预读取 |
publicfunctiongetPrefetch()
{
return$this->getAttribute(PDO::ATTR_PREFETCH);
}
返回数据库连接是否可执行数据预获取。
getSchema() 方法public CDbSchema getSchema() | ||
{return} | CDbSchema | 当前连接的数据库结构 |
publicfunctiongetSchema()
{
if($this->_schema!==null)
return$this->_schema;
else
{
$driver=$this->getDriverName();
if(isset($this->driverMap[$driver]))
return$this->_schema=Yii::createComponent($this->driverMap[$driver],$this);
else
thrownewCDbException(Yii::t('yii','CDbConnectiondoesnotsupportreadingschemafor{driver}database.',
array('{driver}'=>$driver)));
}
}
返回当前连接的数据库结构
getServerInfo() 方法public string getServerInfo() | ||
{return} | string | 返回DBMS服务器的信息。 |
publicfunctiongetServerInfo()
{
return$this->getAttribute(PDO::ATTR_SERVER_INFO);
}
返回DBMS服务器的信息。
getServerVersion() 方法public string getServerVersion() | ||
{return} | string | 返回DBMS服务器的版本信息。 |
publicfunctiongetServerVersion()
{
return$this->getAttribute(PDO::ATTR_SERVER_VERSION);
}
返回DBMS服务器的版本信息。
getStats() 方法public array getStats() | ||
{return} | array | 返回的数组中第一个元素指示SQL语句执行的数目, 第二个元素指示SQL执行的总时间。 |
publicfunctiongetStats()
{
$logger=Yii::getLogger();
$timings=$logger->getProfilingResults(null,'system.db.CDbCommand.query');
$count=count($timings);
$time=array_sum($timings);
$timings=$logger->getProfilingResults(null,'system.db.CDbCommand.execute');
$count+=count($timings);
$time+=array_sum($timings);
returnarray($count,$time);
}
返回SQL执行的统计结果。 返回的结果包含执行SQL语句的数目和 所花费的总时间。 为了使用此方法,enableProfiling必须设置为 true。
getTimeout() 方法public integer getTimeout() | ||
{return} | integer | 返回连接的超时设置。 |
publicfunctiongetTimeout()
{
return$this->getAttribute(PDO::ATTR_TIMEOUT);
}
返回连接的超时设置。
init() 方法public void init() |
publicfunctioninit()
{
parent::init();
if($this->autoConnect)
$this->setActive(true);
}
初始化组件。 该方法对IApplicationComponent 来说是必须的, 并且当 CDbConnection 被用作一个应用程序组件时触发。 如果你重写此方法,请确保调用父类实现 以便可以将组件标记为已初始化。
initConnection() 方法protected void initConnection(PDO $pdo) | ||
$pdo | PDO | PDO实例 |
protectedfunctioninitConnection($pdo)
{
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if($this->emulatePrepare!==null&&constant('PDO::ATTR_EMULATE_PREPARES'))
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,$this->emulatePrepare);
if($this->charset!==null)
{
$driver=strtolower($pdo->getAttribute(PDO::ATTR_DRIVER_NAME));
if(in_array($driver,array('pgsql','mysql','mysqli')))
$pdo->exec('SETNAMES'.$pdo->quote($this->charset));
}
if($this->initSQLs!==null)
{
foreach($this->initSQLsas$sql)
$pdo->exec($sql);
}
}
初始化开放数据库连接。 在数据库连接建立后,调用此方法对。 默认的实现是设置MySQL和PostgreSQL数据库连接的charset。
open() 方法protected void open() |
protectedfunctionopen()
{
if($this->_pdo===null)
{
if(empty($this->connectionString))
thrownewCDbException(Yii::t('yii','CDbConnection.connectionStringcannotbeempty.'));
try
{
Yii::trace('OpeningDBconnection','system.db.CDbConnection');
$this->_pdo=$this->createPdoInstance();
$this->initConnection($this->_pdo);
$this->_active=true;
}
catch(PDOException$e)
{
if(YII_DEBUG)
{
thrownewCDbException(Yii::t('yii','CDbConnectionfailedtoopentheDBconnection:{error}',
array('{error}'=>$e->getMessage())),(int)$e->getCode(),$e->errorInfo);
}
else
{
Yii::log($e->getMessage(),CLogger::LEVEL_ERROR,'exception.CDbException');
thrownewCDbException(Yii::t('yii','CDbConnectionfailedtoopentheDBconnection.'),(int)$e->getCode(),$e->errorInfo);
}
}
}
}
打开数据库连接,如果它当前没有打开
quoteColumnName() 方法public string quoteColumnName(string $name) | ||
$name | string | 列名 |
{return} | string | 正确引用的列名称 |
publicfunctionquoteColumnName($name)
{
return$this->getSchema()->quoteColumnName($name);
}
在一个查询中引用一个列名称。 如果该列名包含前缀,前缀也被恰当的引用。
quoteTableName() 方法public string quoteTableName(string $name) | ||
$name | string | 表名 |
{return} | string | 正确引用的表名 |
publicfunctionquoteTableName($name)
{
return$this->getSchema()->quoteTableName($name);
}
在一个查询中引用的表名。 如果此表名包含schema 前缀,前缀也能被恰当的引用。
quoteValue() 方法public string quoteValue(string $str) | ||
$str | string | 被引用的字符串 |
{return} | string | 正确引用的字符串 |
publicfunctionquoteValue($str)
{
if(is_int($str)||is_float($str))
return$str;
$this->setActive(true);
if(($value=$this->_pdo->quote($str))!==false)
return$value;
else//thedriverdoesn'tsupportquote(e.g.oci)
return"'".addcslashes(str_replace("'","''",$str),"00nr\32")."'";
}
在一个查询中引用一个字符串值。
参见
- http://www.php.net/manual/en/function.PDO-quote.php
public void setActive(boolean $value) | ||
$value | boolean | 说明数据库连接是开启还是关闭。 |
publicfunctionsetActive($value)
{
if($value!=$this->_active)
{
if($value)
$this->open();
else
$this->close();
}
}
打开或关闭DB连接。
setAttribute() 方法public void setAttribute(integer $name, mixed $value) | ||
$name | integer | 要设置的属性 |
$value | mixed | 属性值 |
publicfunctionsetAttribute($name,$value)
{
if($this->_pdoinstanceofPDO)
$this->_pdo->setAttribute($name,$value);
else
$this->_attributes[$name]=$value;
}
设置数据库连接上的一个属性。
参见
- http://www.php.net/manual/en/function.PDO-setAttribute.php
public void setAttributes(array $values) | ||
$values | array | 要被设置的属性(name=>value)。 |
publicfunctionsetAttributes($values)
{
foreach($valuesas$name=>$value)
$this->_attributes[$name]=$value;
}
设置一套数据库连接的属性。
参见
- setAttribute
public void setAutoCommit(boolean $value) | ||
$value | boolean | 返回是否创建或更新DB记录将自动提交。 |
publicfunctionsetAutoCommit($value)
{
$this->setAttribute(PDO::ATTR_AUTOCOMMIT,$value);
}
设置是否创建或更新数据库记录将自动提交。 某些 DBMS (如 sqlite) 可能不支持这个特征。
setColumnCase() 方法public void setColumnCase(mixed $value) | ||
$value | mixed | 列名称的大小写 |
publicfunctionsetColumnCase($value)
{
$this->setAttribute(PDO::ATTR_CASE,$value);
}
设置列名称的大小写。
参见
- http://www.php.net/manual/en/pdo.setattribute.php
public void setNullConversion(mixed $value) | ||
$value | mixed | null和empty 字符串如何转换。 |
publicfunctionsetNullConversion($value)
{
$this->setAttribute(PDO::ATTR_ORACLE_NULLS,$value);
}
设置null和empty 字符串如何转换。
参见
- http://www.php.net/manual/en/pdo.setattribute.php
public void setPersistent(boolean $value) | ||
$value | boolean | 此连接是否是持久连接 |
publicfunctionsetPersistent($value)
{
return$this->setAttribute(PDO::ATTR_PERSISTENT,$value);
}
设置此连接是否是持久连接。 某些 DBMS (如 sqlite) 可能不支持这个特征。