【PHP程序设计(高阶版)】——PHP操作MySQL教程

news2024/11/26 12:37:52

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:PHP程序开发

🅰

请添加图片描述


文章目录

    • 🅰
    • 前言
    • 🎶(1) MySQLi(面向对象过程)
      • 🐤1.建立数据库(mysqli_connect)
      • 🐤2.执行SQL(mysqli_query)
    • 🎶(2) 执行SQL(mysqli_queryM)
      • 🐤1.处理返回结果
      • 🐤2.关闭连接
    • 🎶(3)MySQLi(面向对象)
      • 🐤1.创建连接
      • 🐤2.执行SQL
      • 🐤3.处理返回结果
      • 🐤4.关闭连接
        • 结束语🥇


前言

  PHP提供了 MySQL扩展、MySQLi扩展和PDO(PHP Data 0bjects)三种方式与MSQL数据库交互。在互联网上很多资料使用的是 MySQL扩展,但是PHP7已不再女持MySQL扩展函数,因此本任务使用MySQLi扩展和PDO来操作MySQL数据库,其中MySOL扩展又分为面向过程方式和面向对象方式。那么在实际应用中应该选择哪种方式呢?建议熟悉哪个就用哪个。MySQLi和PDO有各自的优势,具体如下:
  ① PDO 适合多种流行的数据库。
  ② MySOLi 只适合 MYSOL 数据库,
  所以,如果项目需要在多种数据库中切换,建议使用PDO,这样只需要修改连接字符串和部分查询语句即可。使用MVSOL,如果数据库不同,需要重新编写所有代码。同时,MvSOLi和 PDO 都是面向对象,但 MySOLi 还提供了面向过程的 API接口。
PHP与数据库交互主要有以下四个步骤:
  ①创建连接:连接 MYSOL服务器中的数据库。
  ②执行 SOL:编写 SOL语句,并执行 SQL语句,得到返回结果。
  ③处理返回结果。
  ④释放结果集,关闭数据库连接。


🎶(1) MySQLi(面向对象过程)


🐤1.建立数据库(mysqli_connect)

mydsqli_connect函数创建一个到MySQL数据库的连接,其语法格式如下:

mysqli_connect(host ,username ,password,dbname,port);

函数参数说明如下:
  ①host :指要连接的数据库的主机名和IP地址,如果是本地可以使用localhost或者127.0.0.1。
  ②username :指登录数据库的用户名。
  ③password:指登录数据库的密码。
  ④dbname:指要连接的数据库。
  ⑤port:指数据库的端口号,默认值为3306,可以不写。

如果连接成功,函数返回一个代表到MySQL数据库的连接对象;如果连接失败,函数返回false以及警告或错误提示。下面案例一会显示会显示连接数据库成功和失败的信息。
案例一:创建数据库的连接:

<?php
//创造数据库shop连接
$connl=mysqli_connect('localhost','root','123456','shop');
echo"打印连接对象<br/>";
var_dump($connl);
echo"<br/>----------------------------------------------------------------<br/>";
echo "创建数据库shop连接,使用错误密码";
$conn2=mysqli_connect('localhost','root','root','shop');
if(!$conn2)//连接失败
{
	echo mysqli_connect_error();
}
echo"<br/>----------------------------------------------------------------<br/>";
echo "创建数据库shop连接,使用错误数据库名称";
$conn3=mysqli_connect('localhost','root1','123456','shop');
if(!$conn3)//连接失败
{
	echo mysqli_connect_error();
}
?>

运行效果展示:

在这里插入图片描述

🐤2.执行SQL(mysqli_query)

执行SQL包括两个步骤,一遍写SQL语句,一是调用mysqli_query函数执行SQL语句:

mysqli_query(’ connection’,‘query’,‘resultmode’)

函数参数说明如下:
  ①connection:必写,指已连接的数据库。
  ②query:必写,指要查询的字段,即SQL语句。
  ③resultmode:可以不写,一个常数,默认值是MYSQLI_ASSOC。
  针对select语句查询,将返回一个结果集对象(空表也返回一个结果集对象),如果失败,则返回false。针对更新(增加,修改,删除)操作如果成功,返回true,或者返回false。案例二显示执行SQL语句成功和失败的信息。

案例二:执行SQL语句:

<?php
//创造数据库shop连接
$conn=mysqli_connect('localhost','root','123456','shop');
if(!$conn)//连接失败
{
	echo mysqli_connect_error();
	exit;//后面不执行
}

//查询操作
$sql="select * from goods";
$rs=mysqli_query($conn,$sql);
echo"<pre>";
var_dump($rs);

//增加的操作
$sql="insert into goods(names,price,img) values('华为导弹','3000','images/3.jpg')";
$rs=mysqli_query($conn,$sql);
echo"<br/>打印增加数据成功后的返回的结果<br/>";
var_dump($rs);
//增加的操作,设置主键id的冲突
$sql="insert into goods(names,price,img) values(3,'华为导弹','3000','images/3.jpg')";
$rs=mysqli_query($conn,$sql);
echo"<br/>打印增加数据成功后的返回的结果<br/>";
var_dump($rs);
?>

运行效果展示:
在这里插入图片描述


🎶(2) 执行SQL(mysqli_queryM)


🐤1.处理返回结果

  在处理数据库返回的结果中存在两种形式:一种是执行查询语句返回的结果集对象:一种是更新操作(增加、删除、修改)返回的布尔类型。这里仅介绍如何处理返回的结果集对象,至于更新操作返回的布尔类型(影响行数),与一般的判断操作类似,这里不做过多描述。
  MySQL 扩展提供 mysqli_fetch_all(result,resultype)、mysqli_fetch_row(result)、 mysqlifetch_assoc(result)、mysqli _fetch_array(result,resulttype)mysqli_fetch_objeet(result)mysqli_num_rows(result)等函数用于操作结果集。上面的方法都要传入由 mysqli_query 执行 SQL 查询语句返回的结果集。函数执行区别如下:
  (1)mysqli_fetch_all:函数从结果集中取得所有行作为数组,默认返回索引数组即返回的是一个二维数组,下标都是数字。如果想要返回关联数字,即键名为数据库表中的字段名,需要设置第二个参数为 MYSOLI_ASSOC。

案例三:mysqli _fetchz_all函数

<?php
//创造数据库shop连接
$conn=mysqli_connect('localhost','root','123456','shop');
if(!$conn)//连接失败
{
	echo mysqli_connect_error();
	exit;//后面不执行
}
//查询操作
$sql="select * from goods";
$rs=mysqli_query($conn,$sql);
$goods=mysqli_fetch_all($rs);
echo"<br/>默认返回索引数组<br/>";
var_dump($goods);

$rs=mysqli_query($conn,$sql);
$goods=mysqli_fetch_all($rs,MYSQLI_ASSOC);
echo"<br/>设置MYSQLI_ASSOC,返回关联数组<br/>";
var_dump($goods);
?>

运行效果展示:
在这里插入图片描述

🐤2.关闭连接

  关闭数据库之前,建议先释放结果集资源,否则结果集将会一直驻留在内存中。释放结果集的函数如下:

mysql_free_result(result );

  释放结果集后,不能再访问结果集对象,否则程序将会报错。函数mysql_free_result无返回值。
关闭连接的函数如下:

mysql_close( connection);

  如果关闭成功,返回值为true,如果关闭失败,则返回值false。
  虽然先关闭连接再释放结果集,在php中都可以,但是为了养成一个好习惯,建议先关闭连接再去释放结果集。


🎶(3)MySQLi(面向对象)


🐤1.创建连接

  与面向过程方式创建连接类似,如果连接成功,new mysql()将返回一个代表到MySQL数据库的连接的对象:如果连接失败,函数返回false,并给出警告或错误提示。
案例四:创建数据库连接

<?php
//连接数据库
$conn=new mysqli('localhost','root','123456','shop');
//检测连接,如果创建连接成功,connect_error为null
//如果创建失败connect_error保存错误提示
if($conn->connect_error){
	echo "连接失败:".$conn->connect_error;
}else{
	var_dump($conn);
}
echo "<br/>----------------------------------------<br/>";
  //创建数据库shop连接,密码错误
  $conn=new mysqli('localhost','root','root','shop');
  //检测连接,如果创建连接成功,connect_error为null
  //如果创建失败connect_error保存错误提示
  if($conn->connect_error){
  	echo "连接失败:".$conn->connect_error;
  }else{
  	var_dump($conn);
  }
echo "<br/>----------------------------------------<br/>";
  //创建数据库shop连接,密码和数据库错误
  $conn=new mysqli('localhost1','root','root','shop');
  //检测连接,如果创建连接成功,connect_error为null
  //如果创建失败connect_error保存错误提示
  if($conn->connect_error){
  	echo "连接失败:".$conn->connect_error;
  }else{
  	var_dump($conn);
  }
?>

运行结果的显示:
在这里插入图片描述

🐤2.执行SQL

  执行SQL包括两个步骤:一个是编写SQL语句;二是调用连接对象中的query方法执行SQL语句: c o n n − > q u e r y ( conn->query( conn>query(sqrl);
  针对select语句查询,将返回一个结果集对象(空表也返回一个结果集对象),如果失败,则返回false。针对更新(增加,修改和删除)操作,如果成功返回true。
案例五:执行SQL语句

<?php
<?php
//连接数据库
$conn=new mysqli('localhost','root','123456','shop');
//检测连接,如果创建连接成功,connect_error为null
//如果创建失败connect_error保存错误提示
if($conn->connect_error){
	exit( "连接失败:".$conn->connect_error);
}
$sql="select * from goods";
//执行查询sql语句
$rs=$conn->query($sql);
echo "<br/>打印查询成功后的返回结果<br/>";
var_dump($rs);

//增加操作
$sql="insert into goods(names,price,img) values('华为路由','50','imgages/4.jpg')";
$rs=$conn->query($sql);
echo "<br/>打印增加数据成功后的返回结果<br/>";
var_dump($rs);
//增加失败操作
$sql="insert into goods(names,price,img) values(1,'华为路由','50','imgages/4.jpg')";
$rs=$conn->query($sql);
echo "<br/>打印增加数据失败后的返回结果<br/>";
var_dump($rs);
?>

运行结果:
在这里插入图片描述

🐤3.处理返回结果

  MySQL面向对象结果集类处理方法与面向过程类似,常用方法表:

方法返回结果
fetch_all (resulttype)right-aligned 文本居右
fetch_array (resulttype)以一个关联数组、索引数组、或者两者皆有的方式返回一行结果
fetch_object ( )以对象方式返回一行结果
fetch_row ( )以索引数组方式返回一行结果
fetch_assoc ( )以关联数组方式返回一行结果

本知识点仅仅以fetch_all方式举列。
案列六:

<?php
//连接数据库
$conn=new mysqli('localhost','root','123456','shop');
//检测连接,如果创建连接成功,connect_error为null
//如果创建失败connect_error保存错误提示
if($conn->connect_error){
	exit( "连接失败:".$conn->connect_error);
}
$sql="select * from goods";
//执行查询sql语句
$rs=$conn->query($sql);
$goods=$rs->fetch_all(MYSQLI_ASSOC);
var_dump($goods);
?>

运行结果:
在这里插入图片描述

🐤4.关闭连接

  关闭数据库之前,建议先释放结果集资源,否则结果集将会一直驻留在内存中。释放结果集的函数如下:

$rs->free( );

  释放结果集后,不能再访问结果集对象,否则程序将会报错,方法free无返回值。
关闭连接的方法如下:

$conn->close();

  如果关闭成功将会返回true,如果关闭失败将会返回false。
  虽然先关闭连接再释放结果集,在php中都可以,但是为了养成一个好习惯,建议先关闭连接再去释放结果集。

结束语🥇

以上就是PHP程序设计
持续更新PHP程序设计教程,欢迎大家订阅系列专栏🔥PHP程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

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

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

相关文章

Linux C应用编程:MQTT物联网

1 MQTT通信协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传 输&#xff09;是一种基于客户端-服务端架构的消息传输协议&#xff0c;如今&#xff0c;MQTT 成为了最受欢迎的物联网协议&#xff0c;已广泛应用于车联网、智能家居、即时聊…

TikTok怎么开通ads账户

一、TikTok的两种主流玩法 1、付费流量 蓝V认证TikTokAds&#xff08;广告消耗达到3w美金可申请蓝V认证&#xff09; 可以快速引流到独立站 2、免费流量 自己运营种草号、开直播 二、TikTok Ads如何开户&#xff1f; 开通广告账户 首先国内是无法自己申请TikTok Ads的&a…

精彩回顾 | 「AI 驱动增长,研发数智化升级」分享沙龙成功举办

AI 应用元年&#xff0c;人工智能技术将如何助力企业发展新质生产力&#xff0c;构建增长动能&#xff1f; 日前&#xff0c;LigaAI 与深圳市企业联合会、西云数据联合举办了「AI 驱动增长&#xff0c;研发数智化升级」技术专题沙龙。本次活动围绕「AI」应用实践&#xff0c;邀…

【QingHub】EMQX单节点一键部署

EMQX 简介 EMQX是全球最具扩展性的开源MQTT 代理&#xff0c;具有高性能&#xff0c;可在 1 个集群中连接 1 亿多个 IoT 设备&#xff0c;同时保持每秒 100 万条消息的吞吐量和亚毫秒级的延迟。 EMQX 支持MQTT、HTTP、QUIC、WebSocket等多种开放标准协议。它 100% 符合MQTT 5.…

电商技术揭秘十九:电商平台的智能化与自动化技术

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

Spring Web MVC的入门学习(二)

本篇接着Spring Web MVC的入门学习&#xff08;一&#xff09;-CSDN博客来继续学习Spring MVC。 一、从请求中获取Header 1、传统获取 header 获取Header也是从 HttpServletRequest 中获取。 代码&#xff1a; import jakarta.servlet.http.HttpServletRequest; import jakar…

社交网络的未来图景:探索Facebook的发展趋势

随着科技的不断进步和社会的快速变迁&#xff0c;社交网络作为连接人与人之间的重要纽带&#xff0c;扮演着日益重要的角色。而在众多社交网络中&#xff0c;Facebook作为老牌巨头&#xff0c;一直在探索着新的发展路径&#xff0c;引领着社交网络的未来图景。本文将深入探索Fa…

linux学习:栈(汉诺塔游戏)

第一根上面套着 64 个圆的金片&#xff0c;最大的一个在底下&#xff0c;其余一个比一个小&#xff0c;依次叠上去&#xff0c;庙里的众僧不倦地 把它们一个个地从这根棒搬到另一根棒上&#xff0c;规定可利用中间的一根棒作为帮助&#xff0c;但每次只能 搬一个&#xff0c;而…

【vue】v-model 双向数据绑定

:value&#xff1a;单向数据绑定v-model&#xff1a;双向数据绑定 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

Maven创建项目

目录 1.创建项目 2.从Maven Repository: Search/Browse/Explore (mvnrepository.com)链接&#xff0c;下载API 3.1.0 3.在main文件内创建webapp文件夹&#xff0c;再webapp文件夹内创建WEB-INF文件夹&#xff0c;在WEB-INF文件夹内创建web.xml 4.网络编程 5.打包 6.部署 …

Leetcode二十三题:合并K个升序链表【22/1000 python】

“合并K个升序链表”&#xff0c;这是一道中等难度的题目&#xff0c;经常出现在编程面试中。以下是该问题的详细描述、解题步骤、不同算法的比较、代码示例及其分析。 问题描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中…

vue快速入门(十九)使用动态类绑定实现TabBar动态样式

注释很详细&#xff0c;直接上代码 上一篇 新增内容 vue绑定动态样式根据点击事件获取当前点击部分序号 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width…

开源模型应用落地-chatglm3-6b-function call-入门篇(六)

一、前言 每个模型都有自己的限制&#xff0c;有些情况下它们无法满足复杂的业务需求。但是&#xff0c;可以通过一个外置函数的方式&#xff0c;例如&#xff1a;"Function Call"&#xff0c;让开发者能够更加灵活地利用大型语言模型&#xff0c;帮助开发者在特定场…

《QT实用小工具·十九》回车跳转到不同的编辑框

1、概述 源码放在文章末尾 该项目实现通过回车键让光标从一个编辑框跳转到另一个编辑框&#xff0c;下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : p…

【Nacos】Nacos最新版的安装、配置过程记录和踩坑分享

Nacos是什么&#xff1f;有什么功能&#xff1f;大家可以自行联网&#xff08;推荐 https://cn.bing.com/&#xff09;搜索&#xff0c;这里就不做介绍了。 简单的看了下官网&#xff0c;安装最新版的Nacos&#xff08;v2.3.2&#xff09;需要使用到JDK&#xff08;1.8.0&…

JS原生DOM操作 - 获得元素/网页大小/元素宽高

文章目录 获得元素的方法获取页面元素位置宽高概念方法获得网页/元素宽高clientHeight和clientWidth&#xff1a;scrollHeight和scrollWidth&#xff1a;window.innerWidth&#xff1a;element.style.width&#xff1a; offsetXXX 获得网页元素的宽高和相对父元素位置&#xff…

关于运行阿里云直播Demo pub get 报的错

flutter --version dart --version 如何使用Flutter框架推流_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心MediaBox音视频SDK下载指南_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心 终端输入 dart pub --trace get --no-precompile 打印详细报错信息 详细咨…

⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片&#xff0c;类似手机环境下拿图库的照片一样。 效果如下: 话不多说 直接上代码&#xff01; 1.编辑器模式下 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Syst…

Android Studio开发学习(六)———TableLayout(表格布局)、FrameLayout(帧布局)

目录 前言 一、Tablelayout &#xff08;一&#xff09;Tablelayout的相关简介 &#xff08;二&#xff09;TableLayout使用方法 1. 当TableLayout下面写控件、则控件占据一行的大小。(自适应一行&#xff0c;不留空白) 2.多个组件占据一行&#xff0c;则配合TableRow实现…

RocketMQ之Topic和Tag最佳实践

一、Topic是什么&#xff1f;它的作用&#xff1f; Topic即主题&#xff0c;是消息队列中用于对消息进行分类和组织的一种机制&#xff0c;它有以下三种作用&#xff1a; 标识消息分类&#xff1a;RocketMQ的主题用于对消息进行分类和组织。通过为不同类型的消息分配不同的主题…