一、数据库

数据库操作

PHP通过安装相应的扩展来实现数据库操作
当前主流的数据库有:
MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access
一般情况下常说的LAMP架构指的是:
Linux、Apache、Mysql、PHP

if (function_exists('mysql_connect')) {
    echo 'Mysql扩展已经安装';
}

数据库扩展

数据库可能有一个或者多个扩展,其中既有官方的,也有第三方提供的。
像Mysql常用的扩展有原生的mysql库,可使用增强版的mysqli扩展,或使用PDO进行连接与操作。
不同的扩展提供基本相近的操作方法,不同的是可能具备一些新特性,以及操作性能可能会有所不同。

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

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');

mysqli扩展:

$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');

PDO扩展:

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

连接MySQL数据库

指定数据库的地址,用户名及密码。
$host = 'localhost';
$user = 'code1';
$pass = '666';
$link = mysql_connect($host, $user, $pass);

选择一个操作的数据库,mysql_select_db函数选择数据库。
mysql_select_db('code1');

设置当前连接使用的字符编码,一般使用utf8编码。
mysql_query("set names 'utf8'");

执行MySQL查询

采用mysql_query加sql语句的形式向数据库发送查询指令。
$res = mysql_query('select * from user');
查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据。
$row = mysql_fetch_array($res);
var_dump($row);

默认的,PHP使用最近的数据库连接执行查询,
但如果存在多个连接的情况,则可以通过参数指令从那个连接中进行查询。

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

插入数据到MySQL

$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_insert_id函数可以获取自增的主键id。
$uid = mysql_insert_id();
//可以用来判断是否插入成功,或者作为关联ID进行其他的数据操作。

取得数据查询结果

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

$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

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

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

如果要获取数据集中的所有数据,我们通过循环来遍历整个结果集。

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

查询分页数据

通过mysql的limit可以很容易的实现分页,limit m,n表示从m行后取n行数据,要构造m与n来实现获取某一页的所有数据。

假定当前页为pagepage,每页显示n条数据,那么m为当前页前面所有的数据,
m=(m = (page-1) * $n,通过构造SQL语句在PHP中实现数据翻页。

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

使用mm与n变量来表示偏移量与每页数据条数,但推荐使用更有意义的变量名来表示,
比如$pagesize, $start, $offset等,这样更容易理解,有助于团队协作开发。

更新与删除数据

// 更新
$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_rows函数来获取更新过的数据行数,
如果数据没有变化,则结果为0。

$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
    echo mysql_affected_rows();
}

关闭MySQL连接

mysql_close();

虽然PHP会自动关闭数据库连接,一般情况下已经满足需求,但是在对性能要求比较高的情况下,
可以在进行完数据库操作之后尽快关闭数据库连接,以节省资源,提高性能。

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

$link = mysql_connect($host, $user, $pass);
mysql_close($link);

PHP+Mysql+Ajax实现分页

https://www.imooc.com/learn/1117

PHP环境LAMP/LNMP安装与配置

LAMP是Linux + Apache/Nginx + Mysql + PHP的简称。
目前,国内外,无论一线互联网企业还是创业公司,LAMP都是Web开发的主流,以其高性能、特稳定、开源免费等特性闻名于世。

https://www.imooc.com/learn/703

扩展学习:
PHP进阶篇-GD库图像处理:http://www.imooc.com/learn/701


来源:慕课网,内容持续更新中...