PHP中MySQL操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本次使用的demo是MySQL的示例数据库employees,点击下载地址,注意在导入的时候,在employees.sql文件中,将source改成你当前的目录。

本次使用的demo是MySQL的示例数据库employees,点击下载地址,注意在导入的时候,在employees.sql文件中,将source改成你当前的目录。

PHP中的demo代码可以在ideone下载到。

这里使用的是mysqli的方式,其他还有mysql和pdo方式,官方有篇比较的3者区别的文章《Overview》。

一、连接数据库


1.1、连接

mysqli_connect


打开一个到 MySQL 服务器的连接。有面向对象风格和过程化风格。


$link = mysqli_connect("localhost", "root", "123456", "employees");//面向过程
$link = new mysqli("localhost", "root", "123456", "employees");//面向对象

如果成功则返回一个 MySQL 连接对象, 或者在失败时返回 FALSE

 

1.2、设置编码


set_charsetquery。query在下面就会有讲到,这里的话其实就是执行一条语句“SET NAMES utf8”。

设置在数据库间传输字符时所用的默认字符编码。


$link->query("SET NAMES utf8");//执行语句
mysqli_set_charset($link, 'utf8');//面向过程
$link->set_charset('utf8');//面向对象

成功时返回 TRUE, 或者在失败时返回 FALSE

 

二、查询


2.1、对数据库执行一次查询


mysqli_queryquery。返回的信息中并没有记录信息,需要再使用方法获取。

$sql = 'select * from employees limit 10';
$result = mysqli_query($link, $sql);//面向过程
$result = $link->query($sql);//面向对象


image.png


失败时返回 FALSE成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result对象,其他查询则返回TRUE

接下来的2和3就是根据mysqli_result对象来的。

还有就是下面的所有方法都有面向过程和面向对象的方式,为了节省篇幅,下面例子都是面向对象的方式。

 

2.2、查询记录获取


fetch_all、fetch_array、fetch_assoc与fetch_row,返回的是array。

fetch_fields、fetch_field、fetch_object与fetch_field_direct,返回是stdClass Object。

data_seek

重置指针到起始,当做fetch_fields、fetch_assoc等读取数据的时候,指针会变化。

 

fetch_all

返回记录数组,这个方法有可以传递一个参数resulttype,三个常量MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH。默认是MYSQLI_NUM。


$data = $result->fetch_all(MYSQLI_ASSOC);


获取所有结果行并返回结果集作为关联数组数字数组,或两者兼而有之

下面的第一张返回结果图,引用的参数是MYSQLI_ASSOC,第二张引用的参数是MYSQLI_NUM。其实就是key的不同。


image.pngimage.png


 


fetch_array


返回一条记录数组,或没有记录返回NULL。与fetch_all一样,也有个参数resulttype,三个常量供选择。默认是MYSQLI_BOTH。

$data = $result->fetch_array(MYSQLI_ASSOC);


image.pngimage.png

 


fetch_assoc


没有resulttype参数,返回的是一条关联数组,或者没记录返回NULL。如果数组中包含相同的键名,那么将取最后一列。

image.png

 


fetch_row


同样没有resulttype参数,返回的是一条数字数组,或者没有记录返回NULL

image.png

 


fetch_fields


用此方法获取表中所有的字段信息,包括字段名、字段长度、所属表等。

返回多个对象的数组,如果没有就返回FALSE

image.png

 


fetch_field


与上面的方法相对,只会获取某一个字段信息。配合field_seek,可以根据需要获得某个位置的字段信息。

返回个对象的数组,如果没有就返回FALSE


$result->field_seek(1);
$fields = $result->fetch_field();

注意上面的代码,返回的将是第二个字段的信息。

image.png

 

fetch_object

可以传入两个参数class_name和params,返回一个关联对象,如果没有数据返回NULL

image.png

 

fetch_field_direct

可以传入一个参数fieldnr,也就是字段的位置。效果等效于上面的fetch_fieldfield_seek的配合。

image.png

 


2.3、插入更新等信息获取


employees表的主键原先不是自增长的,我后面改了下字段,目前表中有499999条数据。


$sql = "insert into employees(`birth_date`,`first_name`,`last_name`,`gender`,`hire_date`) values ('1988-10-9', 'pw', 'strick', 'M', '1988-10-9')";
$result = $link->query($sql);
var_dump($link->affected_rows);//受影响行数
var_dump($link->insert_id);//主键
//print_r(mysqli_error($link));//打印错误信息


上面的$result返回的将是一个boolean值,而主键和影响行数是需要从mysqli对象中获取。

 

三、预处理


3.1、添加更新等操作


预处理能有效的防止sql注入的产生,mysqli_stmt是预处理类。


$sql = "insert into employees(`birth_date`,`first_name`,`last_name`,`gender`,`hire_date`) values (?,?,?,?,?)";
$stmt = $link->prepare($sql);//获得预处理对象//bind_param中的第N个参数,必须得用变量赋值
$birth_date = '1989-10-9';$first_name = 'pw2';$last_name = 'strick2';$gender = 'M';$hire_date = '1988-10-9';
$stmt->bind_param('sssss', $birth_date, $first_name, $last_name, $gender, $hire_date);//绑定时使用变量绑定
//$stmt->bind_param('sssss', '1989-10-9', 'pw2', 'strick2', 'M', '1988-10-9');//不能使用这种方式
$stmt->execute();//执行预处理
var_dump($stmt->insert_id);//主键
var_dump($stmt->affected_rows);//受影响行数


prepare


初始化一个预处理对象,传入string类型的查询语句。返回一个mysqli_stmt对象,失败则返回FALSE


bind_param


绑定预处理查询语句中的变量。第一个参数是指定数据类型。


image.png

 


3.2、查询


$sql = 'select * from employees limit ?';
$stmt = $link->prepare($sql);
$count = 10;
$stmt->bind_param("i", $count);
$stmt->execute();
$result = $stmt->get_result();//结果集取后的操作就和之前一样了


与上面不同的就是要先preparebind_param,然后execute,最后是get_result获取一个mysqli_result对象,接下来就是和上面的操作一样了。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
10天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实践指南####
深入探索PHP与MySQL结合的魅力,本文旨在通过一系列实战案例,揭示如何高效构建动态交互式网站。从环境搭建到代码实现,全方位解析两者协同工作的原理与技巧,为开发者提供一条清晰的学习路径。 ####
|
15天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
20天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
21天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
本文深入探讨了PHP与MySQL在动态网站开发中的应用实践,通过具体案例解析如何高效结合这两大技术构建数据驱动的Web应用。文章将涵盖环境搭建、基础语法回顾、数据库设计与操作、用户注册与登录系统实现等关键步骤,旨在为开发者提供一个从零到一的项目实战路径,展示PHP与MySQL协同工作的强大能力。 ####
|
2月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
7月前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
510 1
|
存储 SQL 前端开发
【PHP】一文详解如何连接Mysql数据库(附源码)
本文主要讲解PHP如何连接数据库并且根据前端的form表单提交的数据返回到数据库最后查询出来展现
355 0
【PHP】一文详解如何连接Mysql数据库(附源码)
|
关系型数据库 MySQL PHP
PHP连接MySQL数据库
PHP连接MySQL数据库
|
SQL 关系型数据库 MySQL
PHP同时连接多个mysql数据库示例代码
PHP同时连接多个mysql数据库示例代码
183 0
下一篇
无影云桌面