批改状态:未批改
老师批语:
使用PDO创建函数库文件,将数据库常用操作进行封装:
连接,新增,更新,单条查询,多条查询,删除
函数库代码分亨如下:
<?php
/*
PDO数据库操作函数库
*/
//1.连接数据库
//判断函数是否存在,不存在才创建
if(!function_exists('connect'))
{
function connect($dbname,$type='mysql',$host='127.0.0.1',$charset='utf8',$port=3306,$user,$pass)
{
$dsn = "{$type}:host={$host}; dbname={$dbname};charset={$charset};port={$port}";
$userName = $user;
$password = $pass;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_EMULATE_PREPARES => true,
PDO::ATTR_PERSISTENT => true,
];
try {
$pdo = new PDO($dsn,$userName,$password,$options);
} catch (PDOException $e) {
die('Connect ERROR!:'.$e->getMessage());
}
return $pdo;
}
}
//2.新增数据测试
if (!function_exists('insert'))
{
//$pdo对象。
//$table:向哪个表里写数据
//$data:要写入哪些数据,用数组的方式
function insert($pdo, $table, $data=[])
{
//1.创建sql语句:
//INSERT IGNORE staff SET name :name,salsry :salary,....;
//INSERT IGNORE staff SET name=:name,sex=:sex,age=:age,salary=:salary,
$sql = "INSERT IGNORE {$table} SET ";
//SET后的要写入的数据,要先从数组循环遍历后取出再拼接
//array_keys($data)获取数组中的键,作为字段
foreach (array_keys($data) as $field)
{
//拼接
$sql .= $field.'=:'.$field.',';
}
//先去空格:trim()
//再删除右边指定的字符:rtrim()
//添加分号
//再把数据赋给$sql
//得到正确的SQL语句:INSERT IGNORE staff SET name=:name,sex=:sex,age=:age,salary=:salary;
$sql = rtrim(trim($sql), ',').';';
//查看拼接后的SQL语句,调试用。
//die($sql);
//得到正确的SQL语句后,开始创建stmt对象
$stmt = $pdo->prepare($sql);
//绑定参数到预处理对象
foreach ($data as $field => $value)
{
$stmt->bindValue(":{$field}", $value);
}
//执行
if($stmt->execute())
{
if($stmt->rowCount()>0)
{
return true;
} else
{
return false;
}
}
}
}
//3.更新数据
if (!function_exists('update'))
{
function update($pdo,$table,$data=[],$where='')
{
//创建sql语句
$sql = "UPDATE {$table} SET ";
foreach (array_keys($data) as $field) {
$sql .= $field.'=:'.$field.', ';
}
//去掉尾部逗号
$sql = rtrim(trim($sql), ',');
//添加SQL语句的条件
if (!empty($where))
{
//注意WHERE前后要有空格
$sql .= ' WHERE '. $where.';';
} else
{
exit('条件不能为空');
}
//die($sql); //测试查看生成的SQL语句
//创建PDO预处理对象
$stmt = $pdo->prepare($sql);
//绑定参数到预处理对象
foreach ($data as $field => $value) {
$stmt->bindValue(":{$field}",$value);
}
//执行更新操作
if($stmt->execute())
{
if($stmt->rowCount()>0)
{
return true;
} else
{
return false;
}
}
}
}
//4.单条语句查询
if (!function_exists('find')) {
//基本格式:SELECT $fields1,$fields2,... FROM $table WHERE ...;
function find($pdo,$table,$fields,$where=''){
//创建sql语句
$sql = 'SELECT ';
//创建字段列表
//首先判断字段列表是不是数组
if (is_array($fields)) {
//是数组就遍历
foreach ($fields as $field) {
$sql .= $field.', ';
}
} else {//不是数组就是字符串
$sql .= $fields.', ';
}
$sql = rtrim(trim($sql), ',');
$sql .= ' FROM '.$table;
if (!empty($where)) {
$sql .= ' WHERE '.$where;
}
$sql .= ' LIMIT 1'.';';
//创建STMT对象
$stmt = $pdo->prepare($sql);
//执行
if($stmt->execute())
{//判断结果集有没有数据
if($stmt->rowCount()>0)
{
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetch();
} else
{
return false;
}
}
//die($sql);
}
}
//5.多条查询
if (!function_exists('select')) {
//基本格式:SELECT $fields1,$fields2,... FROM $table WHERE ...;
function select($pdo,$table,$fields,$where='', $order=''){
//创建sql语句
$sql = 'SELECT ';
//创建字段列表
//首先判断字段列表是不是数组
if (is_array($fields)) {
//是数组就遍历
foreach ($fields as $field) {
$sql .= $field.', ';
}
} else {//不是数组就是字符串
$sql .= $fields.', ';
}
$sql = rtrim(trim($sql), ',');
$sql .= ' FROM '.$table;
if (!empty($where)) {
$sql .= ' WHERE '.$where;
}
//加入排序条件
if (!empty($order)) {
$sql .= ' ORDER BY '.$order.';';
}
//创建STMT对象
$stmt = $pdo->prepare($sql);
//执行
if($stmt->execute())
{//判断结果集有没有数据
if($stmt->rowCount()>0)
{
$stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetchAll();
} else
{
return false;
}
}
//die($sql);
}
}
//6.删除操作
if (!function_exists('delete')) {
function delete($pdo, $table, $where='')
{
//创建SQL语句
$sql = "DELETE FROM {$table} ";
if (!empty($where)) {
$sql .= 'WHERE '. $where;
} else {
exit('条件不能为空');
}
//去掉尾部的逗号,并添加分号结束。
$sql = rtrim(trim($sql), ',').';';
//die('sql');
//创建PDO预处理对象
$stmt = $pdo->prepare($sql);
//执行删除操作
if ($stmt->execute()) {
if ($stmt->rowCount()>0) {
return true;
} else {
return false;
}
}
}
}点击 "运行实例" 按钮查看在线实例
点击 "运行实例" 按钮查看在线实例
测试文件代码如下:
<?php //1.连接数据库测试 require 'lib/0426hw_func_pdo.php'; $type = 'mysql'; $host = '127.0.0.1'; $dbname = 'php'; $charset = 'utf8'; $port = 3306; $user = 'root'; $pass = 'root'; $pdo = connect($dbname,$type,$host,$charset,$port,$user,$pass); //2.新增数据测试 // $table = 'staff'; // $data = ['name'=>'朱老师','sex'=>0,'age'=>30,'salary'=>5000]; //insert($pdo, $table, $data); //3.更新数据测试 // $table = 'staff'; // $data = ['salary'=>111111]; // $where = 'name = "朱老师"'; // update($pdo, $table, $data, $where); //4.单条语句查询测试 // $table = 'staff'; // $fields = ['name', 'age', 'salary']; // $where = 'age < 40'; // echo '<pre>'.print_r(find($pdo, $table, $fields, $where),true).'</pre>'; //5.多条语句查询测试 // $table = 'staff'; // $fields = ['name', 'age', 'salary']; // $where = 'age < 60'; // $order = 'age ASC'; // echo '<pre>'.print_r(select($pdo, $table, $fields, $where, $order),true).'</pre>'; //6.删除测试 $table = 'staff'; $where = 'name = "懒羊羊"'; delete($pdo, $table, $where);
点击 "运行实例" 按钮查看在线实例
小结:
一开始,让SQL语句拼装难住了,直接蒙圈啦~~~~
一步一步跟着老师敲代码,几乎是一个函数一个函数的做注释,才算明白了拼装的步骤,但其实这里应该是最简单的地方,把老师以前讲的都忘光了。所以说,基础真的很重要!!!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号