php 如何通过mysqli操作数据库?

在PHP中,mysqli(MySQL Improved Extension)是操作MySQL数据库的扩展库,提供了面向对象和过程式两种风格。以下是mysqli的基本操作方法:

1. 连接数据库

面向对象风格
$mysqli = new mysqli('localhost', 'username', 'password', 'database_name');// 检查连接是否成功
if ($mysqli->connect_error) {die("连接失败: " . $mysqli->connect_error);
}echo "连接成功";
过程式风格
$conn = mysqli_connect('localhost', 'username', 'password', 'database_name');if (!$conn) {die("连接失败: " . mysqli_connect_error());
}echo "连接成功";

2. 执行查询(SELECT)

// 准备SQL语句
$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);// 检查查询结果
if ($result->num_rows > 0) {// 输出数据while ($row = $result->fetch_assoc()) {echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";}
} else {echo "0 结果";
}// 释放结果集
$result->free();

3. 预处理语句(防止SQL注入)

// 准备SQL语句
$sql = "SELECT id, name, email FROM users WHERE age > ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$age = 18;
$stmt->bind_param("i", $age); // "i" 表示整数类型// 执行查询
$stmt->execute();// 获取结果
$result = $stmt->get_result();// 处理结果
while ($row = $result->fetch_assoc()) {echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
}// 关闭预处理语句
$stmt->close();

4. 插入数据

// 准备SQL语句
$sql = "INSERT INTO users (name, email, age) VALUES (?, ?, ?)";
$stmt = $mysqli->prepare($sql);// 绑定参数
$name = "John Doe";
$email = "john@example.com";
$age = 30;
$stmt->bind_param("ssi", $name, $email, $age); // "ssi" 表示两个字符串和一个整数// 执行插入
if ($stmt->execute()) {echo "新记录插入成功,ID: " . $stmt->insert_id;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();

5. 更新数据

// 准备SQL语句
$sql = "UPDATE users SET age = ? WHERE id = ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$newAge = 31;
$id = 1;
$stmt->bind_param("ii", $newAge, $id);// 执行更新
if ($stmt->execute()) {echo "记录更新成功,受影响的行数: " . $stmt->affected_rows;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();

6. 删除数据

// 准备SQL语句
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $mysqli->prepare($sql);// 绑定参数
$id = 1;
$stmt->bind_param("i", $id);// 执行删除
if ($stmt->execute()) {echo "记录删除成功,受影响的行数: " . $stmt->affected_rows;
} else {echo "Error: " . $stmt->error;
}// 关闭预处理语句
$stmt->close();

7. 事务处理

// 开始事务
$mysqli->begin_transaction();try {// 执行多个SQL操作$mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");// 提交事务$mysqli->commit();echo "事务执行成功";
} catch (Exception $e) {// 回滚事务$mysqli->rollback();echo "事务失败: " . $e->getMessage();
}

8. 关闭连接

$mysqli->close();

mysqli与PDO的对比

特性mysqliPDO
数据库支持仅MySQL支持多种数据库(MySQL、PostgreSQL等)
面向对象支持(也支持过程式)仅面向对象
预处理语句支持支持
错误处理支持异常模式支持异常模式
事务处理支持支持
跨数据库兼容性

总结

  • mysqli是专门为MySQL设计的扩展,性能略高。
  • 预处理语句是防止SQL注入的关键,强烈推荐使用。
  • 事务处理可确保数据的一致性。
  • 对于跨数据库项目,建议使用PDO。

以上示例展示了mysqli的基本用法,实际开发中建议结合异常处理和预处理语句,提高代码的安全性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88409.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c/c++拷贝函数

memcpy()函数概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上&#xff08;memcpy()并不关心被复制的数据类型&#xff0c;只是逐字节地进行复制&#xff0c;这给函数的使用…

HTTP核心基础详解(附实战要点)

目录 一图胜千言&#xff1a;HTTP核心机制图解​编辑 一、HTTP本质&#xff1a;通信的桥梁 二、五大核心特性解析 三、HTTP头部&#xff1a;隐藏的控制中心 四、连接管理&#xff1a;性能关键点 开发者必知实践技巧 一图胜千言&#xff1a;HTTP核心机制图解 一、HTTP本质…

华为静态路由配置

问题描述&#xff1a;针对两台笔记本和两个路由器在不同的网段场景中&#xff0c;对两个路由器进行静态路由配置。下面以如下场景为例&#xff0c;介绍详细配置过程。配置步骤&#xff1a; 1、对每个路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…

闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程文件请关注…

经典排序算法

文章目录前言1. 排序的基本概念1.1 排序是什么&#xff1f;1.2 常见的排序算法概览2. 常见排序算法的实现2.1 插入排序 (Insertion Sort)2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 (Shell Sort)2.2 选择排序 (Selection Sort)2.2.1 直接选择排序2.2.2 堆排序 (Heap Sort…

RabbitMQ 消息队列:从入门到Spring Boot实战

RabbitMQ 作为一款开源的、基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议实现的消息代理&#xff0c;凭借其强大的功能、灵活的路由机制以及出色的性能&#xff0c;在业界得到了广泛的应用。无论是处理高并发订单、异步通知、日志收集还是系统解耦&…

代账行业数字化破局:从“知道”到“做到”,三步走稳赢!

认知&#xff01;降本&#xff01;增收&#xff01;数字化&#xff01;——这不仅是口号&#xff0c;更是代账行业在激烈竞争和时代变化中生存发展的关键。很多代账同行其实都明白趋势&#xff0c;也知道大概该怎么做。但问题卡在第一步&#xff1a;不知道怎么开始&#xff0c;…

Mac 电脑crontab执行定时任务【Python 实战】

1、crontab -e 编辑定时任务列表 crontab -e查看当前定时任务列表,长按 i 编辑,编辑完之后按 esc 退出编辑,然后输入:wq 保存并提出。 如下: (base) charles@zl ~ % crontab -e58 15 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/charle…

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读

go go go 出发咯 - go web开发入门系列&#xff08;三&#xff09; 项目基础框架搭建与解读 往期回顾 go go go 出发咯 - go web开发入门系列&#xff08;一&#xff09; helloworldgo go go 出发咯 - go web开发入门系列&#xff08;二&#xff09; Gin 框架实战指南 前言 如…

【字节跳动】数据挖掘面试题0014:SQL中count(1), count(*), count(列)区别

文章大纲SQL 中 count(1)、count(*)、count(某列) 的区别一、核心定义与行为差异二、示例说明差异三、性能差异与优化四、适用场景建议五、面试应答要点六、索引扫描与全表扫描1. 索引扫描的触发条件2. 全表扫描的适用场景3. 常见面试问题点Q1&#xff1a;索引扫描一定比全表扫…

Linux面试问题-软件测试

1、你在上一家公司常用的Linux命令有哪些&#xff1f;答&#xff1a;使用vim/vi编辑文件&#xff0c;使用cat&#xff0c;more,less&#xff0c;head查看文件&#xff0c;使用grep过滤日志中的error,使用ps查看进程&#xff0c;使用top查看实时进程&#xff0c;netstat查看端口…

时序数据库的存储之道:从数据特性看技术要点

时序数据的独特挑战时序数据(Time-Series Data)是指按时间顺序记录的一系列数据点&#xff0c;在物联网、金融、工业监控等领域无处不在。与传统数据相比&#xff0c;时序数据具有几个鲜明特点&#xff1a;时间导向性&#xff1a;每个数据点都带有精确的时间戳高写入量&#xf…

【vim中替换】

vim中替换1 : s/在Vim中经常高频使用到的命令&#xff1a;1 : s/ &#xff1a;s 命令的基本语法是 :[range]s/{pattern}/{string}/[flags]&#xff0c;其中&#xff1a; • [range] 是可选的范围&#xff0c;用于指定替换的行范围。例如&#xff0c;% 表示全文&#xff0c;10,…

Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查

文章目录一、创建数据表二、连接MySQL数据库三、封装成一个完整的轻量级 ORM 风格类四、实现派生具体模型类五、支持多线程连接池 ORM 事务封装一、创建数据表 数据库名&#xff1a; 我们先创建一个数据库&#xff0c;名字叫 game_db&#xff1a; CREATE DATABASE IF NOT E…

Python脚本保护工具库之pyarmor使用详解

概要 PyArmor是一个专门为Python代码提供加密保护的第三方库,旨在解决Python源代码易被反编译和泄露的安全问题。作为一种动态代码保护工具,PyArmor能够对Python脚本进行混淆和加密处理,有效防止源代码被恶意获取、分析或篡改。该库特别适用于商业软件开发、知识产权保护和…

仓颉编程语言:从入门到精通

为啥要瞅瞅仓颉这玩意儿&#xff1f; 有一说一&#xff0c;现在的编程语言多得跟米一样&#xff0c;对吧&#xff1f;那一门新语言想火&#xff0c;没点绝活儿肯定不行。仓颉&#xff08;Cangjie&#xff09;这哥们儿&#xff0c;是华为搞出来的新玩意儿&#xff0c;静态编译的…

线性探针是什么:是一种用于探测神经网络中特定特征的工具

线性探针是什么 线性探针是一种在机器学习和相关领域广泛应用的技术,用于评估预训练模型特征、检测数据中的特定序列等。在不同的应用场景下,线性探针有着不同的实现方式和作用: 评估预训练模型特征:在机器学习中,线性探针是一种评估预训练模型“特征迁移能力”的标准化方…

【论文阅读】Few-Shot PPG Signal Generation via Guided Diffusion Models

从少量样本数据选择到后处理的整体框架。首先,扩散模型在N样本数据集和指导下的训练。接着,模型生成一个增强的数据集,并进一步优化以提高保真度。最后,这些合成数据与少量样本训练数据集结合,用于基准模型的训练和评估。数据分布从最初的红色变为保真度增强的蓝色,这表明…

CentOS-7的“ifupdown“与Debian的“ifupdown“对比 笔记250706

CentOS-7的"ifupdown"与Debian的"ifupdown"对比 笔记250706 CentOS 7 和 Debian 的 ifupdown 工具名称相同&#xff0c;但在实现机制、配置文件语法和系统集成上存在显著差异。以下是核心对比分析&#xff1a; ⚙️ 一、核心差异概览 对比维度CentOS 7De…

架构如传承:技术长河中的可持续乐章

代码结构&#xff1a;协作基石 在软件开发的世界里&#xff0c;代码结构就如同建筑的框架&#xff0c;支撑着整个项目的运行。想象一下&#xff0c;你加入了一个新的开发团队&#xff0c;接手一个已经有一定规模的项目。当你打开代码库&#xff0c;看到的是一团乱麻般的代码&a…