PHP技术分享:如何封装mysqli数据库实现高效操作 (mysqli数据库封装)

随着互联网的迅猛发展,数据库技术已经成为了关键的技术之一。在互联网应用的开发中,数据库的操作是必不可少的一部分。在PHP开发中,MySQL是最常用的数据库之一。不过,直接使用MySQL有时候会遇到些问题,因此我们可以通过mysqli数据库的封装来实现高效的MySQL操作。

本篇文章将会分享一下如何封装mysqli数据库来实现高效操作MySQL。

1. 面向对象的MySQLi数据库

在PHP中,使用MySQLi扩展可以很方便地操作MySQL数据库。但是,为了在多个脚本中使用相同的数据库配置,我们需要对它进行封装。采用面向对象编程能让代码更加归一化和易读,并便于维护。

在封装MySQLi数据库时,我们会创建一个Database类,并包含以下属性和方法:

属性:

– host: 连接MySQL服务器的地址

– username: 连接MySQL服务器的用户名

– password: 连接MySQL服务器的密码

– database: 连接的MySQL数据库名

– conn: MySQLi连接对象

方法:

– __construct(): 构造函数,用于连接MySQL服务器并连接到指定的数据库

– query($query): 执行查询SQL语句

– fetch($result): 获取单行数据的关联数组

– fetchAll($result): 获取多行数据的关联数组

– insert($table, $data): 插入数据

– update($table, $data, $where): 更新数据

– delete($table, $where): 删除数据

– error(): 获取MySQLi连接的最后一个错误信息

下面是一个示例Database类的代码片段:

“`

class Database {

private $host = “localhost”;

private $username = “root”;

private $password = “password”;

private $database = “test”;

private $conn;

public function __construct() {

$this->conn = new mysqli($this->host, $this->username, $this->password, $this->database);

if ($this->conn->connect_error) {

die(“Connect fled: ” . $this->conn->connect_error);

}

$this->conn->set_charset(“utf8”);

}

public function query($query) {

$result = $this->conn->query($query);

if (!$result) {

return false;

}

return $result;

}

public function fetch($result) {

return $result->fetch_assoc();

}

public function fetchAll($result) {

$rows = array();

while ($row = $result->fetch_assoc()) {

$rows[] = $row;

}

return $rows;

}

public function insert($table, $data) {

$fields = array();

$values = array();

foreach ($data as $field => $value) {

$fields[] = “`” . $field . “`”;

$values[] = “‘” . $this->conn->real_escape_string($value) . “‘”;

}

$query = “INSERT INTO ” . $table . ” (” . implode(“, “, $fields) . “) VALUES (” . implode(“, “, $values) . “)”;

return $this->query($query);

}

public function update($table, $data, $where) {

$assignments = array();

foreach ($data as $field => $value) {

$assignments[] = “`” . $field . “` = ‘” . $this->conn->real_escape_string($value) . “‘”;

}

$query = “UPDATE ” . $table . ” SET ” . implode(“, “, $assignments) . ” WHERE ” . $where;

return $this->query($query);

}

public function delete($table, $where) {

$query = “DELETE FROM ” . $table . ” WHERE ” . $where;

return $this->query($query);

}

public function error() {

return $this->conn->error;

}

}

“`

2. 使用封装的MySQLi数据库

在使用封装的MySQLi数据库时,我们只需要实例化上面的Database类。然后,我们可以使用它的方法进行需要的操作。

下面是一个示例代码片段,演示了如何使用封装的MySQLi数据库:

“`

$database = new Database();

// 查询数据

$result = $database->query(“SELECT * FROM `users` WHERE `id` = 1”);

if ($result === false) {

echo “Query error: ” . $database->error();

} else {

$user = $database->fetch($result);

echo $user[‘username’];

}

// 插入数据

$database->insert(“users”, array(

“username” => “user1”,

“password” => “password1”

));

// 更新数据

$database->update(“users”, array(

“password” => “password2”

), “`id` = 1”);

// 删除数据

$database->delete(“users”, “`id` = 1”);

“`

封装MySQLi数据库的好处:

使用封装的MySQLi数据库可以带来一些好处,例如:简化代码,减少代码的错误率,可以管理和重用代码,提高代码的可读性和可维护性。

此外,封装MySQLi数据库可以使得程序员专注于数据库操作逻辑而不是连接/断开连接的代码。

结论:

在封装MySQLi数据库中,我们构造了一个Database类来连接MySQL服务器并连接到指定的数据库,然后可以通过其方法来进行相应的操作(如查询、插入、更新和删除数据)。使用封装MySQLi数据库可以带来许多好处,例如简化操作逻辑,减少错误范围,以及提高代码的可读性和可维护性。

相关问题拓展阅读:

  • php表单写入mysql数据库的代码

php表单写入mysql数据库的代码

陆侍

label{display:inline-block;width:100px;margin-bottom:10px;}

 

 

Add students

 

–>

–>

First Name

Last Name

department

Email

 

   

‘;

echo $last_name;

echo ”;

echo $department;

echo ”;

echo $email;

echo ”;

$servername = “localhost”;

//Your database username 轿迹and password

//$username = “username”;

//$password = “password”;

$username = “tester”;

$password = “testerPassword”;

//your database name

$dbname = “test”;

$tablename =”student”;

// Create connection

$connect = mysqli_connect($servername, $username, $password, $dbname);

if (!$connect) {

    die(“Connection failed: ” . mysqli_connect_error());

}

//Execute the query

$sql=”INSERT INTO $tablename (first_name,last_name,department,email)

VALUES(‘$first_name’,’$last_name’,’$department’,’$email’)”;

if (mysqli_query($connect, $sql)) {

    echo “Hooray! New record is inserted to database successfully. Please check database.”;

} else {

    echo “Error: ” . $sql . “” . mysqli_error($connect);

}

mysqli_close($connect);

?>

‘;

echo $last_name;

echo ”;

echo $department;

echo ”;

echo $email;

echo ”;

$servername = “localhost”;

//Your database username and password

//$username = “username”;

//$password = “password”;

$username = “tester”;

$password = “testerPassword”;

//database name

$dbname = “test”;

$tablename =”student”;

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

if ($conn->connect_error) {

    die(“Connection failed: ” . $conn->connect_error);

$sql=”INSERT INTO $tablename (first_name,last_name,department,email)

VALUES(‘$first_name’,’$last_name’,’$department’,’$email’)”;

if ($conn->query($sql) === TRUE) {

    echo “New record created successfully”;

} else {

    echo “Error: ” . $sql . “
” . $conn->error;

}

$conn->close();

?>

‘;

echo $last_name;

echo ”;

echo $department;

echo ”;

echo $email;

echo ”;

$servername = “localhost”;

//Your database username and password

//$username = “username”;

//$password = “password”;

$username = “tester”;

$password = “testerPassword”;

//your database name

$dbname = “test”;

$tablename =”student”;

// Create connection

try {

    $conn = new PDO(“mysql:host=$servername;dbname=$dbname”, $username, $password);

    // set the PDO error mode to exception

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql=”INSERT INTO $tablename (first_name,last_name,department,email)

VALUES(‘$first_name’,’$last_name’,’$department’,’$email’)”;

    // use exec() 

    $conn->exec($sql);

    echo “New record created successfully”;

    }

catch(PDOException $e)

    {

    echo $sql . “
” . $e->getMessage();

    }

$conn = null;

?>

–创建数据库test, 将此文件存为test.sql 导入数据库,或者手动创建表结构

— phpMyAdmin SQL Dump

— version 4.7.4

— 

— Host: 127.0.0.1:3306

— Generation Time: Mar 12, 2023 at 04:04 AM

— Server version: 5.7.19

— PHP Version: 7.1.9

SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;

SET AUTOCOMMIT = 0;

START TRANSACTION;

SET time_zone = “+00:00”;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8mb4 */;

— Database: `test`

— Table structure for table `student`

DROP TABLE IF EXISTS `student`;

CREATE TABLE IF NOT EXISTS `student` (

  `id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,

  `first_name` varchar(20) NOT NULL,

  `last_name` varchar(20) NOT NULL,

  `department` varchar(50) NOT NULL,

  `email` varchar(50) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

— Dumping data for table `student`

INSERT INTO `student` (`id`, `first_name`, `last_name`, `department`, `email`) VALUES

(1, ‘first1’, ‘last1’, ‘cs’, ‘);

COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

‘白如意’,

‘grade’=>’新手村一级’,

‘girlfriend’=>’不存在数据库’,

‘age’=>18

    );

    $Student->add($data);

//myDB.class.php

class myDB{

    public $tableName = ”;

    public function __construct($tableName){

$this->tableName = $tableName;

    }

    public function db(){

$config = array(

‘host’=>’127.0.0.1’,

‘user’=>’root’,

‘password’=>’root’,

‘database’=>’test’,

‘port’=>3306,

);

$set = array_values($config);

$mysqli = new mysqli(…$set);

$query = ‘SET NAMES UTF8’;

$mysqli->query($query);

if($mysqli->errno){

printf(“连接数据库错误 %s”,$mysqli->郑带error);

exit;

}

return $mysqli;

    }

    public function add($data){

$mysqli = $this->db();

$tableName = $this->tableName;

$dataArr = $this->filterFromTable($tableName,$data);

$this->co($dataArr);

//获得$sql ,$typeList,$needData

extract($dataArr);

$stmt = $mysqli->stmt_init();  

$stmt->prepare($sql);

$stmt->bind_param($typeList,…$needData);

if ( $result = $stmt->execute() ){ 

$insert_id = $stmt->insert_id;

echo “成功插入ID”.$insert_id;

}else {  

echo “执行失败”.$stmt->errno;

echo ”;

echo $stmt->error;  

$insert_id = 0;

}

return $insert_id;

    }   

    public function filterFromTable($tableName,$data){

$sqlField = ”;//字段:  a,b,c

$sqlQ = ”;//问号:  ?,?,?

$typeList = ”;//字段的类型: ssdib 

$needData = array();

//根据表结构获取字段类型列表

$fieldTypeArr = $this->fieldTypeArr($tableName);

$this->co($fieldTypeArr);

    //之一种、循环Table存在字段

foreach($fieldTypeArr as $field=>$type){

$param = @$data?:’编程夜未眠’;//传入参数存在该字段

if($param != ‘编程夜未眠’){

  $sqlField .= $field.’,’;

  $sqlQ .= ‘?,’;

  $typeList .= $type;

  $needData = $param;

}

含判 }

$sqlField = substr( $sqlField,0,strlen($sqlField)-1 ); 

$sqlQ = substr( $sqlQ,0,strlen($sqlQ)-1 ); 

$sql = “INSERT INTO {$tableName}({$sqlField}) 

VALUES({$sqlQ})”;

$dataArr = array(

‘sql’=>$sql,

‘typeList’=>$typeList,

‘needData’=>$needData,

);

return $dataArr;

    }

    public function fieldTypeArr($tableName){

$arr= array();

$mysqli = $this->db();

$sql = “DESC {$tableName}”;

$result_obj = $mysqli->query($sql);

while($row = $result_obj->fetch_object() ){

$type = $row->Type;

$field= $row->Field;

$str = $this->oneFieldType($type);

$arr = $str;

}

$mysqli->close();

return $arr;

    }

    public function oneFieldType($type){

$str = ”;

if(strstr($type,’int’)){

$str = ‘i’;

}else if( strstr($type,’float’) || strstr($type,’decimal’) || strstr($type,’double’)   ){

$str = ‘d’;

}else if( strstr($type,’blob’) ){

$str = ‘b’;

}else{

$str = ‘s’;

}

return $str;

    }

    public function co($value){

echo ”;

print_r($value);

echo ”;

    }

}//End Class

mysqli数据库封装的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysqli数据库封装,PHP技术分享:如何封装mysqli数据库实现高效操作,php表单写入mysql数据库的代码的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/236936.html<

(0)
管理的头像管理
上一篇2025-04-22 06:07
下一篇 2025-04-22 06:08

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注