Blogger Information
Blog 42
fans 0
comment 1
visits 26343
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO创建函数库-4月26日作业
日薪月e的博客
Original
839 people have browsed it

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

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post