博客列表 >PDO创建函数库-4月26日作业

PDO创建函数库-4月26日作业

日薪月e的博客
日薪月e的博客原创
2018年04月27日 17:10:40848浏览

使用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语句拼装难住了,直接蒙圈啦~~~~

一步一步跟着老师敲代码,几乎是一个函数一个函数的做注释,才算明白了拼装的步骤,但其实这里应该是最简单的地方,把老师以前讲的都忘光了。所以说,基础真的很重要!!!


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议