【PHP】MySQL简介与MySQLi函数(含PHP与MySQL交互)

文章目录

  • 一、MySQL简介
  • 二、MySQLi函数
    • 1. 开启mysqli扩展:
    • 2. PHP MySQLi扩展的常用函数
  • 三、PHP与MySQL交互
    • 0. 准备
    • 1. 创建连接(mysqli_connect() )
      • 连接mysql语法
    • 2. 选择数据库(mysqli_select_db())
    • 3. 在php中操作数据库执行语句
      • 1. 读取.sql文件
      • 2. 操作数据库
    • 4. 连接例子:
  • 四、扩展知识
    • mysqli不能使用localhost的解决办法

一、MySQL简介

MySQL是由瑞典MySQL AB公司(先后被Sun和Oracle公司收购)开发的关系型数据库管理系统,支持UNIX,Linux,macOS和Windows等平台上使用。MySQL数据库的默认端口号为3306。

优点:体积小,速度快,使用更加方便快捷,且开源。

特点:

  1. 跨平台性
  2. 可靠性
  3. 适用性
  4. 开源免费

注意:mysql数据库操作时,为了避免用户自定义的数据库名称、字段名称或数据表名称与系统命令冲突,最好使用反引号(`)包裹这些名称。

二、MySQLi函数

PHP作为一门编程语言,本身并不具备操作数据库的功能。所以,若想要在项目开发中完成PHP应用和MySQL数据库之间交互,就需要借助PHP提供的数据库扩展。PHP提供了许多数据库扩展,比较常用的有MySQL扩展、MySQLi扩展和PHP数据对象(PHP Data Objects, PDO)扩展。而PHP MySQLi(PHP MySQL Improved)可以连接MySQL数据库服务器。

注:MySQLi 扩展被设计用于 MySQL 4.1.13 版本或更新的版本。

在使用 MySQLi 函数之前,必须打开 MySQLi 扩展。

1. 开启mysqli扩展:

  1. 检查php的ext文件夹下面看是否有php_mysqli.dll文件

  2. 打开php安装目录下的配置文件:php.ini
    在这里插入图片描述

  3. 找到mysqli扩展

    ;extension=mysqli.dll
    

    在这里插入图片描述

  4. 将分号删掉,并保存
    在这里插入图片描述

  5. 重启apache服务器即可。

2. PHP MySQLi扩展的常用函数

函数描述
mysqli_connect()连接MySQL服务器
mysqli_connect_error()获取连接服务器时的错误信息
mysqli_select_db()选择数据库
mysqli_set_charset()设置客户端字符集
mysqli_query()执行SQL语句,写操作返回true或false,读操作返回结果集对象
mysqli_insert_id()获取上一次插入操作时产生的ID
mysqli_affected_rows()获取上一次操作时受影响的行数
mysqli_errno()返回上一个MySQL操作中的错误信息的错误码
mysqli_error()返回上一个MySQL操作中的错误信息
mysqli_close()关闭数据库连接

三、PHP与MySQL交互

PHP 通过内置函数库 mysqli 进行 MySQL 数据库编程的步骤如下:

  1. 建立与 MySQL 数据服务器的连接(使用 mysqli_connect() 函数);
  2. 选择要进行操作的数据库(使用 mysqli_select_db() 函数);
  3. 执行数据库的操作,如数据的添加删除等(使用 mysqli_query() 函数);
  4. 关闭与 MySQL 数据库服务器进行的连接(使用 mysqli_close() 函数);

0. 准备

前提:apache、mysql、php安装好了,且配置成功。(或者直接使用集成环境WampServer)

开启mysqli扩展:

  1. 检查php的ext文件夹下面看是否有php_mysqli.dll文件

  2. 打开php安装目录下的配置文件:php.ini
    在这里插入图片描述

  3. 找到mysqli扩展

    ;extension=mysqli.dll
    

    在这里插入图片描述

  4. 将分号删掉,并保存
    在这里插入图片描述

  5. 重启apache服务器
    在这里插入图片描述

1. 创建连接(mysqli_connect() )

连接mysql语法

PHP 可以通过 mysqli 接口来连接 MySQL 数据库服务器。mysqli 接口提供了mysqli_connect()函数进行连接。语法格式如下:

$con = mysqli_connect("host_name", "user_name", "password", "mysqldb_name", "port"); // 连接mysql数据库
  • @ 隐藏错误

  • die() 条件显示

  • mysqli_connect_error() 获取连接数据库的错误信息

  • mysqli_connect_errno() 获取连接数据库的错误编码

  • mysqli_set_charset(连接对象,字符编码)

    说明:

    1. host_name:主机名或者主机的 IP 地址,本章中默认的主机名为“localhost:3306”。
    2. user_name:用于登录 MySQL 服务器的用户名,默认值为 root。
    3. pass_word:用户登录口令,默认值为空。
    4. mysqldb_name:数据库名
    5. port:端口号,如果端口号是3306可省略

上述语句通过 mysqli_connect()函数连接 MySQL 数据库服务器并把此连接生成的对象传递给名为$con 的变量。在默认情况下 MySQL 服务器的端口号为 3306,如果采用默认端口号,则可以不指定。如果采用了其他端口号,则要特别指出,如 localhsot:3307。

mysqli_connect( )若成功执行,则返回一个资源句柄型(连接标识号),否者返回逻辑值 FALSE。mysqli_connect( )函数将返回值存放在一个变量中,在其他地方直接引用该变量即可。

2. 选择数据库(mysqli_select_db())

语法格式:

mysqli_select_db(数据库服务器连接对象, "数据库名")

如:

mysqli_select_db($conn, "book")

数据库服务器连接对象或连资源句柄型用于指定相应的与 MySQL 数据库服务器相连的连接标识号,数据库名为指定需要连接的数据库名称。

3. 在php中操作数据库执行语句

1. 读取.sql文件

使用PHP的file_get_contents函数读取要导入的 .sql文件,并将其保存在变量中。

<?php
sql_file = "database.sql"; //.sql文件路径sql_content = file_get_contents($sql_file); //读取.sql文件中的内容
?>

2. 操作数据库

执行语句模板为:

$变量名 = 'mysql执行语句';
mysqli_query($连接名, $变量名);

举例:

$sql = 'create database test';
mysqli_query($conn, $sql);  // 数据库执行上面语句

在这里插入图片描述

4. 连接例子:

例1:

<?php
	$conn=mysqli_connect("localhost","wrong_user","my_password","my_db");
	// 检查连接
	if (!$conn)
	{
	    die("连接错误: " . mysqli_connect_error());
	}
?>

例2:

<?php
	header("Content-Type: text/html; charset=utf-8"); // 避免中文乱码
	
	echo "你好";
    echo "<br>";
	$conn = mysqli_connect("localhost:3306", "root", "");
	var_dump($conn);
    echo "<br>";
	if(!mysqli_select_db($conn, "book")){  // 如果连接“book”库失败
		echo "连接失败<-_->".mysqli_connect_error(); // 显示连接失败信息
		exit;
	}else{
		echo "连接成功"; // 显示连接成功
	}
?>

浏览器输出结果:

在这里插入图片描述

数据放在mysql安装目录下的data目录下。

四、扩展知识

mysqli不能使用localhost的解决办法

使用mysqli_connect()连接时,当主机填写为localhost时,MySQL会采用 unix domain socket连接,当主机填写为127.0.0.1时MySQL会采用TCP/IP的方式连接。使用Unix socket的连接比TCP/IP的连接更加快速与安全。这是MySQL连接的特性,可以参考MySQL官方文档4.2.4 Connecting to the MySQL Server Using Command Options

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs:the client connects using a Unix socket file.
To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1 (instead of localhost), or the IP address or name of the local server. You can also specify the transport protocol explicitly, even for localhost, by using the --protocol=TCP option.

解决办法:

  1. 将mysqli_connect()里的localhost后面加上端口号,如我用的是3307端口(因为我下载了两个mysql数据库服务器),写成:mysqli_connect(‘localhost:3307’, ‘root’, ‘root’)
    在这里插入图片描述
  2. 使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
  3. 修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路径)
  1. 直接在php建立连接的时候指定my.socket的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【burpsuite安全练兵场-客户端16】测试WebSockets安全漏洞-3个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

微服务--03--OpenFeign 实现远程调用 (负载均衡组件SpringCloudLoadBalancer)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 OpenFeign其作用就是基于SpringMVC的常见注解&#xff0c;帮我们优雅的实现http请求的发送。 RestTemplate实现了服务的远程调用 OpenFeign快速入门负载均衡组件Spr…

深入redis过程-命令

目录 通用命令 get set keys exists del expire key seconds ttl type 常用数据结构 String类型 SET GET MSET MGET INCR INCRBY INCRBYFLOAT SETNX SETEX Hash类型 HSET key field value HGET key field HMSET HMGET HGETALL HKEYS HVALS HINCRB…

Redis队列stream,Redis多线程详解

Redis 目前最新版本为 Redis-6.2.6 &#xff0c;会以 CentOS7 下 Redis-6.2.4 版本进行讲解。 下载地址&#xff1a; https://redis.io/download 安装运行 Redis 很简单&#xff0c;在 Linux 下执行上面的 4 条命令即可 &#xff0c;同时前面的 课程已经有完整的视…

Ubuntu 上使能 SELinux

首发公号&#xff1a;Rand_cs 此文档说明如何在 ubuntu 上启用 SELinux&#xff0c;测试环境为虚拟机&#xff0c;开始前一定一定一定先来个快照&#xff0c;不要问我为什么有三个一定。 卸载 apparmor&#xff08;可选&#xff09; ubuntu 默认安装的安全组件为 apparmor&a…

红队攻防之hash登录RDP

没什么好害怕&#xff0c;孩子放心去飞吧&#xff0c;在你的身后有个等你的家 Restricted Admin Mode 受限管理模式是一项 Windows 功能&#xff0c;可防止将 RDP 用户的凭据存储在建立 RDP 连接的计算机的内存中。 这是用来防止用户&#xff08;管理员&#xff09;在 RDP 进…

使用Pytorch从零开始构建扩散模型-DDPM

知识回顾: [1] 生成式建模概述 [2] Transformer I&#xff0c;Transformer II [3] 变分自编码器 [4] 生成对抗网络&#xff0c;高级生成对抗网络 I&#xff0c;高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II 引言 去噪…

Windows系统下搭建PXE Server

在给一台服务器初始安装OS时一般有以下几种方式&#xff1a; 1、通过BMC挂载iso镜像来安装&#xff1b; 2、通过U盘启动来安装&#xff1b; 3、通过网络启动来安装&#xff1b; 方式1和方式2只能一台一台地进行&#xff0c;且需要有键盘和显示器&#xff0c;效率低下&#xff…

Jmeter--如何监控服务器资源

在我们做项目的性能测试时&#xff0c;需要查看相关服务器的资源使用情况&#xff1b;本文以apache-Jmeter-5.5版本为例&#xff0c;使用PerfMon进行服务器资源监控的方案由两部分来实现&#xff1a;ServerAgent部署在被测服务器&#xff0c;负责资源耗用数据的采集&#xff0c…

运营商网络性能测试-Y.1564

前言 在网络部署之后和业务开展之前&#xff0c;运营商迫切希望了解当前网络的性能状态&#xff0c;以便为商业规划和业务推广提供必要的基础数据支持。因此&#xff0c;高可靠性和高精确度的性能测试方法对于运营商评判网络性能的优劣&#xff0c;显得尤为重要&#xff0c;而…

在虚拟机搭建nignx,和使用本地访问nginx的情况

下载nginx yum install nginx 查看nginx是否安装成功。 nginx -v nginx的配置文件的目录和资源的目录。 先到nginx.conf的目录下&#xff0c;在 /etc/nginx/nginx.conf&#xff0c;编辑它。 vi /etc/nginx/nginx.conf 可以看到默认的html的目录。在 /usr/share/nginx/html 下面…

算法 离散化

整数离散化 适用条件 适用于有序的整数序列该序列的值域很大&#xff0c;该序列的数的个数很少使用的是数的相对大小而非绝对大小 算法思路 原数组 a &#xff1a; 数组下标&#xff1a;0 1 2 3 4 数组元素&#xff1a;1 2 2 5 109 映射数组 &#xff1a; 数组下标&…

等保——密评技术要求

密评简介 密评定义&#xff1a;全称商用密码应用安全评估, 是指对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估。密评对象&#xff1a;重要信息系统、关键信息基础设施、网络安全等保三级及以上的系统。评测依据&#xff1…

算法通关村-----数据流的中位数

数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: MedianFin…

Photoshop Elements 2023 v21.0(ps简化版)

Photoshop Elements 2023是一款ps简化版图像处理软件&#xff0c;它加入了一些新的功能和工具&#xff0c;以帮助用户更高效地处理图片。 新功能&#xff1a;软件加入了黑科技&#xff0c;采用Adobe Sensei AI技术&#xff0c;主打人工智能&#xff0c;一键P图&#xff0c;新增…

Haskell 安装 Cairo

背景 Haskell 项目需要使用到柱状图&#xff0c;折线图等&#xff08;demo 代码&#xff09; 步骤&#xff08;默认已安装 stack, cabal, ghcup&#xff09; nameversionstack2.11.1cabal3.8.1.0ghcup0.1.20.0 在 package.yaml 中添加所需依赖 Chart 和 Chart-cairo name:…

查看当前目录下文件数量

查看当前目录下文件数量 查看文件夹数量查看文件数查看所有文件&#xff08;包括子文件&#xff09;数量查看所有目录&#xff08;包括子目录&#xff09;数量查看图片数量 查看文件夹数量 ls -l | grep ^d | wc -l查看文件数 不包含文件夹 ls -l | grep ^- | wc -l查看所有…

Selenium 学习(0.17)——软件测试之测试用例设计方法——白盒测试——逻辑覆盖法(条件覆盖和条件判定覆盖)

条件覆盖 设计测试用例&#xff0c;使每个判断中每个条件的可能取值至少满足一次。 条件判定覆盖 通过设计足够的测试用例&#xff0c;满足如下条件&#xff1a; 所有条件的可能至少执行一次的取值 所有判断的可能结果至少执行一次 条件判定覆盖同时满足判定覆…

springcloud nacos配置优先级研究及配置管理最佳实践

目录 背景工具版本SpringCloud配置存放位置及相应优先级代码中nacosjar包外挂 多种配置共同存在时的优先级项目配置管理最佳实践无nacos的情况有nacos的情况 参考文献 背景 公司有很多应用是基于SpringBoot/SpringCloud开发。由于在配置文件中经常会涉及数据库账号密码之类的敏…

【Java学习笔记】73 - 正则表达式

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter27/src/com/yinhai/regexp 一、引入正则表达式 1.提取文章中所有的英文单词 2.提取文章中所有的数字 3.提取文章中所有的英文单词和数字 4.提取百度热榜标题 正则表达式是处理文本的利器…