PHP数据库操作函数选型与应用实践
PHP是一种广泛应用于Web开发的编程语言,作为Web开发中最基本的功能之一,数据库的操作是PHP开发中必不可少的一部分。本文将重点探讨PHP数据库操作函数的选型和应用实践,帮助开发者更好地选择并使用数据库操作函数来提高开发效率和代码质量。
一、MySQLi函数库和PDO扩展库的选择
PHP提供了两种方式来操作数据库:MySQLi函数库和PDO扩展库。MySQLi函数库是PHP专门针对MySQL数据库的操作函数库,支持面向对象和面向过程两种编程风格,提供了大量的API函数供使用。而PDO扩展库是一种通用的数据库操作扩展库,可以支持多种数据库,包括MySQL、SQLite、PostgreSQL等,并且也支持面向对象和面向过程两种编程风格。所以,在选择数据库操作函数库的时候,我们需要根据实际的应用需求来进行选择。
对于MySQLi函数库,它对于MySQL数据库的支持更加完善和灵活,提供了很多方便的API函数供使用,例如mysqli_query()、mysqli_fetch_array()等。但是,这也意味着MySQLi函数库更加专注于MySQL数据库的操作,如果需求变更,需要更换数据库时,可能需要重新编码。
而对于PDO扩展库,虽然相比MySQLi函数库的API函数较少,但是它提供了更加通用的数据库操作接口,可以支持多种数据库,并且可以避免在更换数据库时,需要重新编码的问题。不过,如果我们只需要操作MySQL数据库,使用MySQLi函数库也可以达到良好的效果,并且在一些情况下,MySQLi函数库的性能更加优秀。
二、主要的数据库操作函数
无论是使用MySQLi函数库还是PDO扩展库,PHP都提供了大量的API函数用来操作数据库。下面列举一些常用的数据库操作函数:
1.连接MySQL数据库
MySQLi函数库:
$mysqli = new mysqli('localhost','用户名','密码','数据库名');
PDO扩展库:
$pdo = new PDO('mysql:host=localhost;dbname=数据库名','用户名','密码');
2.执行SQL查询语句
MySQLi函数库:
$result = mysqli_query($mysqli,"SELECT * FROM 表名");
PDO扩展库:
$stmt = $pdo->query("SELECT * FROM 表名");
3.获取查询结果集
MySQLi函数库:
$row = mysqli_fetch_array($result);
PDO扩展库:
$row = $stmt->fetch();
4.插入数据
MySQLi函数库:
$sql = "INSERT INTO 表名(字段1,字段2...) VALUES('数值1','数值2'...)";
mysqli_query($mysqli,$sql);
PDO扩展库:
$sql = "INSERT INTO 表名(字段1,字段2...) VALUES('数值1','数值2'...)";
$pdo->exec($sql);
5.删除数据
MySQLi函数库:
$sql = "DELETE FROM 表名 WHERE 条件";
mysqli_query($mysqli,$sql);
PDO扩展库:
$sql = "DELETE FROM 表名 WHERE 条件";
$pdo->exec($sql);
6.更新数据
MySQLi函数库:
$sql = "UPDATE 表名 SET 字段1='数值1',字段2='数值2' WHERE 条件";
mysqli_query($mysqli,$sql);
PDO扩展库:
$sql = "UPDATE 表名 SET 字段1='数值1',字段2='数值2' WHERE 条件";
$pdo->exec($sql);
7.事务处理
MySQLi函数库:
$mysqli->autocommit(FALSE);
$mysqli->begin_transaction();
$mysqli->query("SQL 语句 1");
$mysqli->query("SQL 语句 2");
$mysqli->commit();
$mysqli->autocommit(TRUE);
PDO扩展库:
$pdo->beginTransaction();
$pdo->exec("SQL 语句 1");
$pdo->exec("SQL 语句 2");
$pdo->commit();
三、PHP数据库操作应用实践
通过以上的介绍和示例,相信大家已经了解到PHP数据库操作函数的选型和应用实践。下面结合一个实际的应用案例,来展示如何使用MySQLi函数库和PDO扩展库来操作MySQL数据库。
假设我们需要开发一个简单的订单系统,包括以下三个表:
1.用户信息表(users)
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
phone varchar(20) NOT NULL,
address varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.商品信息表(products)
CREATE TABLE products (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
price decimal(10,2) NOT NULL,
description varchar(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.订单信息表(orders)
CREATE TABLE orders (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
product_id int(11) NOT NULL,
status varchar(20) NOT NULL DEFAULT 'created',
price decimal(10,2) NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id),
KEY product_id (product_id),
FOREIGN KEY (user_id) REFERENCES users (id),
FOREIGN KEY (product_id) REFERENCES products (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在,我们需要实现以下几个功能:
1.用户登录。
2.浏览商品列表。
3.新增订单。
4.浏览订单列表。
5.更改订单状态。
下面,我们将使用MySQLi函数库和PDO扩展库来实现以上的这些功能。
使用MySQLi函数库
1.用户登录
$mysqli = new mysqli('localhost','root','root','test');
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$sql = "SELECT * FROM users WHERE name='$username' AND password='$password'";
$result = mysqli_query($mysqli,$sql);
$row = mysqli_fetch_assoc($result);
if($row){
session_start();
$_SESSION['user'] = $row;
header('Location:index.php');
}
else{
echo "用户名或密码错误!";
}
}
2.浏览商品列表
$mysqli = new mysqli('localhost','root','root','test');
$sql = "SELECT * FROM products";
$result = mysqli_query($mysqli,$sql);
while($row = mysqli_fetch_assoc($result)){
echo "{$row['name']} {$row['price']} {$row['description']}";
}
3.新增订单
$mysqli = new mysqli('localhost','root','root','test');
$user_id = $_POST['user_id'];
$product_id = $_POST['product_id'];
$price = $_POST['price'];
$sql = "INSERT INTO orders(user_id,product_id,price) VALUES('$user_id','$product_id','$price')";
mysqli_query($mysqli,$sql);
4.浏览订单列表
$mysqli = new mysqli('localhost','root','root','test');
$sql = "SELECT * FROM orders";
$result = mysqli_query($mysqli,$sql);
while($row = mysqli_fetch_assoc($result)){
echo "{$row['id']} {$row['user_id']} {$row['product_id']} {$row['status']} {$row['price']}";
}
5.更改订单状态
$mysqli = new mysqli('localhost','root','root','test');
$id = $_POST['id'];
$status = $_POST['status'];
$sql = "UPDATE orders SET status='$status' WHERE id='$id'";
mysqli_query($mysqli,$sql);
使用PDO扩展库
1.用户登录
$pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$sql = "SELECT * FROM users WHERE name='$username' AND password='$password'";
$stmt = $pdo->query($sql);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row){
session_start();
$_SESSION['user'] = $row;
header('Location:index.php');
}
else{
echo "用户名或密码错误!";
}
}
2.浏览商品列表
$pdo = new PDO('mysql:host=localhost;dbname=test','root','root');
$sql = "SELECT * FROM products";
$stmt = $pdo->query($sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo "{$row
