七、数据库操作

7.1 支持哪些数据库

通过安装相应的扩展来实现数据库操作,当前主流数据库MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等都能够安装扩展来支持,一般情况下常说的LAMP架构值:Linux、Apache、Mysql、PHP,因此Mysql数据库在Php中的应用非常广泛。

7.2 数据库扩展

php中一个数据库可能有一个或多个扩展,既有官方的也有第三方提供的。像mysql常用的扩展有原生的mysql库,也可以使用增强版的mysqli扩展,还可以使用PDO进行链接和操作。

不同扩展提供基本相近的操作方法,不同的是可能具备一些新特性以及操作性能可能会有所不同。

mysql扩展进行数据库链接的方法:

$link=mysql_connect('mysql_host','user','password');

mysqli扩展:

$link=mysqli_connection('mysql_host','user','password');

PDO扩展:

$dsn='mysql:dbname=testdb;host=127.0.0.1';
$dbh=new PDO($dsn,'user','password');

7.3 连接mysql数据库

php对数据库进行操作首先需要建立链接,通常使用mysql_connect函数进行数据库链接,该函数需要知道数据库的地址用户名和密码

$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);

php链接数据库的方式类似直接在命令行下进行连接,类似

mysql -h localhost -u code1 -p

连接成功后需要选择一个操作的数据库,通过mysql_select_db函数来选择数据库

mysql_selec_db('testdb');

通常会先设置一下当前连接使用的字符编码,一般用的utf-8

mysql_query("set names 'utf8'");

通过上面步骤就与数据库建立了连接,可以进行数据库操作了。

7.4 执行mysql查询

在数据库建立连接后进行查询,采用mysql_query加sql语句的形式向数据库发送查询指令。

$res=mysql_query('select * from user');

对于查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据。

$row=mysql_fetch_array($res);
car_down($row);

默认php使用最近的数据库连接执行查询,若存在多个连接的情况,则可以通过参数命令指定查询的连接。

$link1=mysql_connection('127.0.0.1','code1','');
$link2=mysql_connection('127.0.0.1','code2','',true);//开启一个新的连接
$res=mysql_query('select * from user limit 1',$link1);//从第一个连接查询数据

7.5 插入新数据到mysql中

​执行插入数据和查询类似,也是通过执行一个sql来实现,例如:

$sql ="insert into user(name,age,class) values ('张三',18,'高一三班')";
mysql_query($sql);//执行插入语句

通常数据存在于变量或数组中,因此需要先进行字符串拼接得到。

$name ='张三';
$age=18;
$class='高三一班';
$sql="insert into user(name,age,class) values('$name','$age','$class')";
mysql_query($sql);//执行插入语句

在mysql中没执行插入语句以后可以得到自增的主键id可以通过msql_insert_id函数获取该id.

$uid=mysql_insert_id();

​可以通过这个来判断是否插入成功或者关联进行其他数据操作

7.6 取得数据查询结果

php中有多个函数可以获取数据集中的一行数据,最常用的是mysql_fetch_array,可以通过设定参数来更改行数据的下标,默认的会包含数字索引的下标以及字段名的关联索引下标。

$sql='select * from user limit 1';
$res=mysql_query($sql);
$row=mysql_fetch_array($res);

可以通过设定参数MYSQL_NUM只获取数字索引数组,等同于mysql_fetch_row函数,若设定参数为MYSQL_ASSOC则只获取关联索引数组,等同于mysql_fetch_assoc函数。

$row=mysql_fetch_row($res);
$row=mysql_fetch_array($res,MYSQL_NUM);
//这两个方法获取的数据是一样的

$row=mysql_fetch_assoc($res);
$row=mysql_fetch_array($res,MYSQL_ASSOC);

若要获取数据集中所有数据,通过循环来遍历整个结果集

$data=array();
while($row=mysql_fetch_array($res)){
    $data[]=$row;
}
​

7.7 分页查询数据

通过mysql的limit可以很容易的实现分页,limit m,n 表示从m行后取n行数据,在php中需要构造m与n来实现分页查询结果。

假定当前页为$page,每页显示$n条数据,m为当前页前面所有的数据,既$m=($page-1)*$n,知道原理后通过构造sql语句在php中实现分页查询。

$page=2;
$n=2;
$m=($page-1)*$n;
$sql ="select * from user limit $m,$n";
$res=mysql_select($sql);
//获取当前页数据
$data=array();
while($row=mysql_fetch_assoc($result)){
    $data[]=$row;
}

例子中使用了$m和$n变量标识偏移量与每页数据条数,推荐更有意义的变量名表示,入$page_size,$start,$offset等更容易理解。

7.8 更新与删除数据

数据更新删除相对简单,只需要构建好相应sql语句,然后调用mysql_query执行就能完成

$sql="update user set name='李四' where id =2 limit 1";
if(mysql_query($sql)){
    echo "更新成功";
}

删除:

$sql ="delete from user where id=2 limit 1";
if(mysql_query($sql)){
    echo "删除成功";
}

对于删除和更新操作,可以通过函数mysql_affected_row函数来获取更新过的数据行数,数据无变化返回0。

$sql ="update user set name='张三' where id =2 ";
if(sql_query($sql)){
    echo mysql_affected_rows();
}
​

7.9 关闭数据库连接

数据库操作完成后可以使用mysql_close关闭数据库连接,默认当php执行完毕会自动关闭数据库连接。

mysql_close();

在对性能要求较高的情况下,在进行数据库操作后尽快关闭连接,以节省资源提高性能。

存在多个数据库连接的情况下,可以设定连接资源参数来关闭指定的连接

$link =mysql_connection($host,$user,$password);
mysql_close($link);
​
最后修改:2019 年 05 月 21 日
如果觉得我的文章对你有用,请随意赞赏