
常用的配置方式是在项目配置文件中添加下面的参数:
<?php
//项目配置文件
return array(
//数据库配置信息
'DB_TYPE' =>'mysql', // 数据库类型
'DB_HOST' =>'localhost', // 服务器地址
'DB_NAME' =>'thinkphp', // 数据库名
'DB_USER' =>'root', // 用户名
'DB_PWD'=>'', // 密码
'DB_PORT' =>3306, // 端口
'DB_PREFIX' =>'think_', // 数据库表前缀
//其他项目配置参数
// ...
)
或者采用如下配置
'DB_DSN' =>'mysql://username:password@localhost:3306/DbName'
使用DB_DSN方式定义可以简化配置参数,DSN参数格式为:
数据库类型://用户名:密码@数据库地址:数据库端口/数据库名
如果两种配置参数同时存在的话,DB_DSN配置参数优先。
注意:如果要设置分布式数据库,暂时不支持DB_DSN方式配置。1
如果采用PDO驱动的话,则必须首先配置DB_TYPE 为pdo,然后还需要单独配置其他参数,例如:
//PDO连接方式
'DB_TYPE' =>'pdo', // 数据库类型
'DB_USER' =>'root', // 用户名
'DB_PWD'=>'', // 密码
'DB_PREFIX' =>'think_', // 数据库表前缀
'DB_DSN'=>'mysql:host=localhostdbname=thinkphpcharset=UTF-8'
注意:PDO方式的DB_DSN配置格式有所区别,根据不同的数据库类型设置有所不同。
配置文件定义的数据库连接信息一般是系统默认采用的,因为一般一个项目的数据库访问配置是相同的。该方法系统在连接数据库的时候会自动获取,无需手动连接。
可以对每个项目和不同的分组定义不同的数据库连接信息,如果开启了调试模式的话,还可以在不同的应用状态的配置文件里面定义独立的数据库配置信息。1
第二种 在模型类里面定义connection属性
如果在某个模型类里面定义了connection属性的话,则实例化该自定义模型的时候会采用定义的数据库连接信息,而不是配置文件中设置的默认连接信息,通常用于某些数据表位于当前数据库连接之外的其它数据库,例如:
//在模型里单独设置数据库连接信息
protected $connection = array(
'db_type' =>'mysql',
'db_user' =>'root',
'db_pwd' =>'1234',
'db_host' =>'localhost',
'db_port' =>'3306',
'db_name' =>'thinkphp'
)
也可以采用DSN方式定义,例如:
//或者使用DSN定义
protected $connection = 'mysql://root:1234@localhost:3306/thinkphp'
如果我们已经在配置文件中配置了额外的数据库连接信息,例如:
//数据库配置1
'DB_CONFIG1' =>array(
'db_type' =>'mysql',
'db_user' =>'root',
'db_pwd' =>'1234',
'db_host' =>'localhost',
'db_port' =>'3306',
'db_name' =>'thinkphp'
),
//数据库配置2
'DB_CONFIG2' =>'mysql://root:1234@localhost:3306/thinkphp'
那么,我们可以把模型类的属性定义改为:
//调用配置文件中的数据库配置1
protected $connection = 'DB_CONFIG1'
//调用配置文件中的数据库配置2
protected $connection = 'DB_CONFIG2'
如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:
$User = M('User','other_','mysql://root:1234@localhost/demo')
表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:
$User = M('User','other_','DB_CONFIG2')
如果你的个别数据表没有定义任何前缀的话,可以在前缀参数中传入NULL,例如:
$User = M('User',Null,'DB_CONFIG2')
表示实例化User模型,连接的是demo数据库的user表。
需要注意的是,ThinkPHP的数据库连接的惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据 *** 作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。
连接到一个 url 地址为localhost 、 端口为 3306 的mysql服务器上。mysql服务器的帐号是"root",密码是"9999"。mysql 服务器上有一个数据库 ok , 数据库里有一个表 abc。表 abc 一共为两列,列名分别是 "id" 和 "name" ,将 abc 里的所有数据读出来。<?
$dbh = @mysql_connect("localhost:3306","root","9999")
/* 定义变量dbh , mysql_connect()函数的意思是连接mysql数据库, "@"的意思是屏蔽报错 */
if(!$dbh){die("error")}
/* die()函数的意思是将括号里的字串送到浏览器并中断PHP程式 (Script)。括号里的参数为欲送出的字串。 */
@mysql_select_db("ok", $dbh)
/* 选择mysql服务器里的一个数据库,这里选的数据库名为 ok */
$q = "SELECT * FROM abc"
/* 定义变量q, "SELECT * FROM abc"是一个SQL语句,意思是读取表abc中的数据 */
?>
<br />
<!--========= 方法一 =========-->
<br />
<?
$rs = mysql_query($q, $dbh)
/* 定义变量 rs ,函数mysql_query()的意思是:送出 query 字串供 MySQL 做相关的处理或者执行.由于php是从右往左执行的,所以,rs的值是服务器运行mysql_query()函数后返回的值 */
if(!$rs){die("Valid result!")}
echo "<table>"
echo "<tr><td>ID</td><td>Name</td></tr>"
while($row = mysql_fetch_row($rs)) echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>"
/* 定义量变(数组)row,并利用while循环,把数据一一写出来.
函数mysql_fetch_row()的意思是:将查询结果$rs单列拆到阵列变数中.
$row[0] 和 $row[1] 的位置可以换*/
echo "</table>"
?>
<br />
<!--========= 方法二 =========-->
<br />
<?
$rs = mysql_query($q, $dbh)
while($row = mysql_fetch_object($rs)) echo "$row->id $row->name <br />"
/* id和name可以换位置 */
?>
<br />
<!--========= 方法三 =========-->
<br />
<?
$rs = mysql_query($q, $dbh)
while($row = mysql_fetch_array($rs)) echo "$row[id] $row[name] <br />"
/* id和name可以换位置 */
?>
<!--========= 方法三最快 =========-->
<?
@mysql_close($dbh)
/* 关闭到mysql数据库的连接 */
?>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)