PHP中一个数据库可能有一个或者多个扩展,其中既有官方的,也有第三方提供的。像MysqL常用的扩展有原生的MysqL库,也可以使用增强版的MysqLi扩展,还可以使用PDO进行连接与操作。
不同的扩展提供基本相近的操作方法,不同的是可能具备一些新特性,以及操作性能可能会有所不同。
$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);
PHP数据库操作之执行MySQL查询
在数据库建立连接以后就可以进行查询,采用MysqL_query加sql语句的形式向数据库发送查询指令。
$res = MysqL_query('select * from user limit 1');
对于查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据。
$row = MysqL_fetch_array($res); var_dump($row);
PHP数据库操作之插入新数据到MysqL中
当我们了解了如何使用MysqL_query进行数据查询以后,那么类似的,插入数据其实也是通过执行一个sql语句来实现,例如:
$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')"; MysqL_query($sql); //执行插入语句
在MysqL中,执行插入语句以后,可以得到自增的主键id,通过PHP的MysqL_insert_id函数可以获取该id。
$uid = MysqL_insert_id();
这个id的作用非常大,通常可以用来判断是否插入成功,或者作为关联ID进行其他的数据操作。
PHP数据库操作之取得数据查询结果
我们发现PHP操作数据库跟MysqL客户端上操作极为相似,先进行连接,然后执行sql语句,再然后获取我们想要的结果集。
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; }
PHP数据库操作之查询分页数据
上一节中,我们了解到通过循环可以获取一个查询的所有数据,在实际应用中,我们并不希望一次性获取数据表中的所有数据,那样性能会非常的低,因此会使用翻页功能,每页仅显示10条或者20条数据。
通过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"; $result = MysqL_query($sql); //循环获取当前页的数据 $data = array(); while ($row = MysqL_fetch_assoc($result)) { $data[] = $row; }
在上面的例子中,我们使用了$m与$n变量来表示偏移量与每页数据条数,但我们推荐使用更有意义的变量名来表示,比如$pagesize, $start, $offset等,这样更容易理解,有助于团队协作开发。